Linux программирование в примерах
Шрифт:
8.5. Обход дерева файлов: GNU
du
GNU версия
du
в GNU Coreutils использует nftw
для обхода одной или более иерархии файлов, собирая и выводя сведения, касающиеся количества используемого дискового пространства. У нее большое число опций, которые управляют ее поведением но отношению к символическим ссылкам, форматом вывода чисел и т.д. Это делает разбор кода труднее, чем могло бы быть при более простой версии. (Однако, мы не собираемся позволить этому остановить
du
, которые вскоре будут полезны, когда мы рассмотрим код. $ du --help
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("..")
'. 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)
Поделиться:
Популярные книги
#Бояръ-Аниме. Газлайтер. Том 36
36. История Телепата
Фантастика:
боевая фантастика
аниме
фэнтези
5.00
рейтинг книги
Наша навсегда
2. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Кодекс Крови. Книга ХVIII
18. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 4
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Точка Бифуркации III
3. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Геном хищника. Книга пятая
5. Я - Легенда!
Фантастика:
рпг
фэнтези
попаданцы
6.00
рейтинг книги
Вторая жизнь майора. Цикл
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Двойник Короля 4
4. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 6
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Наследник
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Инженер Петра Великого 5
5. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
4.75
рейтинг книги
Хозяин Теней 3
3. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бандит
1. Петр Синельников
Фантастика:
фэнтези
7.92
рейтинг книги
Кодекс Охотника. Книга VI
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00