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

Упражнения

Упражнения

1. Изучите справочную страницу mount(2) под GNU/Linux и на всех различных системах Unix, к которым у вас есть доступ. Как отличаются системные вызовы?

2. Усовершенствуйте программу ch08-statvfs.c, чтобы она принимала опцию, предоставляющую открытый целый дескриптор файла; для получения сведений о файловой системе она должна использовать fstatvfs().

3. Усовершенствуйте ch08-statvfs.c, чтобы она не игнорировала смонтированные файловые системы NFS. Такие файловые системы имеют устройство в форме server.example.com:/big/disk.

4. Измените ch08-statfs.c (ту, которая использует специфичный для Linux вызов statfs()), чтобы ее вывод был похож на вывод df.

5. Добавьте опцию -i к программе, которую вы написали для предыдущего упражнения, чтобы ее вывод был такой же, как у 'df -i'.

6. Используя opendir(), readdir(), stat() или fstat(), dirfd() и fchdir(), напишите собственную версию getcwd(). Как вы вычислите общий размер, который должен иметь буфер? Как вы будете перемещаться по иерархии каталогов?

7. Усовершенствуйте свою версию getcwd(), чтобы она выделяла буфер для вызывающего, если первый аргумент равен NULL.

8. Можете ли вы использовать nftw() для написания getcwd()? Если нет, почему?

9. Используя nftw(), напишите свою собственную версию chown, которая принимает опцию -R для рекурсивной обработки целых деревьев каталогов. Убедитесь, что без -R, 'chown пользователь каталог' не является рекурсивной. Как вы это проверите?

10. Набор процедур BSD fts() («file tree stream» — «поток дерева файлов») предоставляет другой способ для обработки иерархии каталогов. У него несколько более тяжелый API как в смысле числа функций, так и структур, которые доступны для вызывающих функций уровня пользователя. Эти функции доступны как стандартная часть GLIBC.

Прочтите справочную страницу fts(3). (Для удобства ее можно распечатать.) Перепишите свою частную версию chown для использования fts().

11. Посмотрите справочную страницу find(1). Если бы вы пытались написать find с самого начала, какой набор деревьев файлов вы бы предпочли, nftw() или fts()? Почему?

Оглавление книги


Генерация: 0.076. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз