Вывод должен представлять строку в 10 символов, идентичную первому полю вывода 'ls -l
Когда установлены биты S_ISUID
S_IXUSR, используйте s вместо x; если установлен лишь бит I_ISUID, используйте S. То же относится к битам S_ISGID и S_IXGRP. Если установлены оба бита S_ISVTX и S_IXOTH, используйте t; для одного S_ISVTX используйте T.Для простоты можете использовать статический (static
2. Доработайте ch05-catdir.c
stat() для каждого найденного имени файла. Затем выведите номер индекса, результат вызова fmt_mode(), число ссылок и имя файла.3. Доработайте ch05-catdir.c
4. Добавьте такую опцию, что если имя файла является именем подкаталога, программа рекурсивно входит в него и отображает сведения о файлах (и каталогах) этого подкаталога. Необходим лишь один уровень рекурсии.
5. Если вы не работаете на системе GNU/Linux, запустите ch05-trymkdir
6. Напишите программу mkdir
7. В корневом каталоге, /
.' и '..' совпадают. Используя эту информацию, напишите программу pwd.Вначале программа должна найти имя текущего каталога, прочитав содержимое родительского каталога. Затем она должна продолжить собирать сведения о иерархии файловой системы, пока не достигнет корневого каталога.
Отображение имени каталога в обратном порядке, от текущего каталога до корневого, легко. Как будет справляться ваша версия pwd
8. Если вы написали pwd
9. Тщательно исследуйте функцию rpl_utime()
utime(file, NULL)»). Какой ресурс не восстанавливается, если одна из проверок в середине if не выполняется? (Спасибо Джеффу Колье (Geoff Collyer).)10. (Трудное) Прочтите страницу справки для
Когда вы решите, что это работает, напишите свою собственную версию chmod
chmod() — или open() и fchmod() — и почему?Глава 6
Общие библиотечные интерфейсы — часть 1
В главе 5 «Каталоги и служебные данные файлов» мы видели, что непосредственное чтение каталога возвращает имена файлов в том порядке, в каком они хранятся в каталоге. Мы также видели, что struct stat
В данной главе представлена оставшаяся часть API, необходимая для полного использования значений компонентов struct stat
time_t для представления времени и функций форматирования времени; функции сортировки и поиска (для сортировки имен файлов или других данных); типы uid_t и gid_t для представления пользователей, групп и функций, которые сопоставляют их с соответствующими именами пользователей и групп; и наконец, функцию для проверки того, что дескриптор файла представляет терминал.6.1. Времена и даты
Значения времени хранятся в типе, который известен как time_t
На системах GNU/Linux и Unix значения time_t
time_t является long int С. Для 32-разрядных систем это означает, что time_t переполнится 19 января 2038 г. К тому времени, мы надеемся, тип time_t будет переопределен как по меньшей мере 64-разрядное значение.