Linux программирование в примерах

На нашем литературном портале можно бесплатно читать книгу Linux программирование в примерах, Роббинс Арнольд-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Linux программирование в примерах
Название: Linux программирование в примерах
Дата добавления: 16 январь 2020
Количество просмотров: 974
Читать онлайн

Linux программирование в примерах читать книгу онлайн

Linux программирование в примерах - читать бесплатно онлайн , автор Роббинс Арнольд

В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.

 

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

$ <b>du --help</b>

Usage: du [OPTION]... [FILE]...

  Дает сводку использования диска для каждого FILE,

  рекурсивно для каталогов.

  Обязательные для длинных опций аргументы являются обязательными

  также и для коротких опций.

-a,  --all              записать число всех файлов, а не только

                        каталогов

     --apparent-size    вывести видимые размеры, а не использование

                        диска; хотя видимый размер обычно меньше, он

                        может быть и больше из-за дыр в файлах,

                        внутренней фрагментации, косвенных блоков и т.п.

-В,  --block-size=SIZE  использовать блоки размером SIZE байтов

-b,  --bytes            эквивалентно '--apparent-size --block-size=1'

-с,  --total            выводит итоговую сумму

-D,  --dereference-args разыменовывать FILE, которые являются

                        символическими ссылками

-h,  --human-readable   вывести размеры в удобном для восприятия

                        формате (например, 1K 234М 2G)

-Н,  --si               так же, но использовать степени 1000, не 1024

-k                      подобно --block-size=1K

-l,  --count-links      считать размеры несколько раз при прямых

                        ссылках

-L,  --dereference      разыменовывать все символические ссылки

-S,  --separate-dirs    не включать размер подкаталогов

-s,  --summarize        отобразить для каждого аргумента лишь итоги

-х,  --one-file-system  пропускать каталоги на различных файловых

                        системах

-X   --exclude-         исключить файлы, подходящие под любой

FILE from=FILE          образец в FILE

     --exclude=PATTERN  исключить файлы, соответствующие PATTERN

     --max-depth=N      вывести итог для каталога (или файла, с --all)

                        только если он находится на N или менее уровней

                        глубже аргумента командной строки;

     --max-depth=0      то же самое, что и --summarize

     --help             отобразить экран справки и выйти

     --version          вывести сведения о версии и выйти

SIZE может быть (или может быть целым, за которым

может следовать это) одним из

следующих: kB 1000, K 1024, MB 1 000 000, M 1 048 576 и т.д.

для G, T, Р, E, Z, Y.

Чтобы еще больше усложнить дело,

du
использует частную версию
nftw()
, у которой есть несколько расширений. Сначала имеются дополнительные значения флагов для функции обратного вызова:

FTW_DCHP

Это значение означает, что

nftw()
не может выполнять '
chdir(&quot;..&quot;)
'.

FTW_DCH

Это значение означает, что

nftw()
не может использовать
chdir()
для перехода в сам каталог.

FTW_DPRE

Частная

nftw()
вызывает для каталогов функцию обратного вызова дважды. Это значение используется при первой встрече с каталогом. После обработки всех нижележащих объектов каталога используется стандартное значение
FTW_DP
.

Частная

nftw()
добавляет также в
struct FTW
новый член,
int skip
. Если текущий объект является каталогом и функция обратного вызова устанавливает в поле
skip
ненулевое значение,
nftw()
не будет больше обрабатывать этот каталог. (Функция обратного вызова должна установить
skip
таким образом, когда
flag
равен
FTW_DPRE
; делать это для
FTW_DP
слишком поздно.)

С этим объяснением за поясом, вот функция

process_file()
из
du.c
. Номера строк приведены относительно начала функции:

1  /* Эта функция вызывается один раз для каждого объекта файловой

2     системы, с которой сталкивается nftw. nftw осуществляет сначала

3     поиск вглубь. Эта функция знает это и собирает итоги для каталогов

4     на основе изменений в глубине текущего элемента. */

5

6  static int

7  process_file(const char *file, const struct stat *sb,

8   int file_type, struct FTW *info)

9  {

10  uintmax_t size;

11  uintmax_t size_to_print;

12  static int first_call = 1;

13  static size_t prev_level;

14  static size_t n_alloc;

15  static uintmax_t *sum_ent;

16  static uintmax_t *sum_subdir;

17  int print = 1;

18

19  /* Всегда определяйте info-&gt;skip перед возвратом. */

20  info-&gt;skip = excluded_filename(exclude, file + info-&gt;base);

    /* Для --exclude */

Эта функция делает многое, поскольку ей приходится реализовать все опции

du
. Строка 17 устанавливает
print
в true (1); по умолчанию выводятся сведения о каждом файле. Дальнейший код устанавливает ее при необходимости в false (0).

Перейти на страницу:
Комментариев (0)
название