Системное программирование, файлы и каталоги
Все программы должны соответствовать принятому стилю кодирования.
- В начале файла - заголовок с автором и лицензией;
- Перед каждой функцией - комментарий с описанием функции и аргументов;
- Текст программы разбит на "абзацы" с комментарием перед каждым "абзацем".
Все возвращаемые функциями значения должны проверяться. В случае ошибок выполнение программы должно аварийно завершаться с выдачей сообщения об ошибке и кодом завершения EXIT_FAILURE.
4. Файлы и каталоги
- Выполнить функцию stat() для указанного пути и вывести тип объекта (файл, каталог, символьное устройство, блочное устройство, конвейер, символическая ссылка или сокет). В этом и следующих ниже примерах путь к объекту получать из командной строки.
- Выполнить функцию stat() для указанного пути и вывести права доступа к объекту.
- Выполнить функцию stat() для указанного пути и вывести major и minor устройства, на котором хранится объект. Найти это устройство в каталоге /dev. Используйте major() и minor() (man major) для получения major и minor.
- Выполнить функцию stat() для указанного пути. Если объект является устройством, то вывести его major и minor. Сравнить с результатами вывода ls -l.
- Выполнить функцию stat() для указанного пути. Вывести количество ссылок на объект.
- Выполнить функцию stat() для указанного пути. Вывести идентификатор владельца объекта.
- Выполнить функцию stat() для указанного пути. Вывести идентификатор группы объекта.
- Выполнить функцию stat() для указанного пути. Если объект является файлом, то вывести размер файла в байтах.
- Выполнить функцию stat() для указанного пути. Вывести время последнего обращения.
- Выполнить функцию stat() для указанного пути. Вывести время последнего изменения данных.
- Выполнить функцию stat() для указанного пути. Вывести время последнего изменения метаданных.
- Выполнить функцию stat() для указанного пути. Вывести размер блока файловой системы, количество занятых блоков по 512 байт, а также произведение 512*blocks. Сравнить с результатами работы утилиты du.
- Повторить пример 4.1 с использованием функции lstat(). Проверить различия в работе stat() и lstat() для символических ссылок.
- Повторить пример 4.1 с использованием функции fstat().
- Установить umask 0077 с помощью функции umask(). С помошью функции open() создать файл с указанным именем (получать из командной строки) и правами доступа 0644. Проверить, какие права доступа получит созданный файл. Объяснить результат.
- Реализовать пример работы функции unlink(). Объект для удаления получать используя аргументы командной строки.
- Реализовать пример работы функции remove(). Объект для удаления получать используя аргументы командной строки.
- Реализовать пример работы функции rename(). Имена (старое и новое) получать используя аргументы командной строки.
- Реализовать пример работы функции symlink(). Имена (объекта и ссылки на него) получать используя аргументы командной строки.
- Реализовать пример работы функции readlink(). Имя ссылки получать используя аргументы командной строки.
- Реализовать пример работы функции link(). Имена (объекта и ссылки на него) получать используя аргументы командной строки.
- Реализовать пример работы функции mkdir(). Имя каталога получать используя аргументы командной строки.
- Реализовать пример работы функции rmdir(). Имя каталога получать используя аргументы командной строки.
- Реализовать пример работы функции getcwd().
- Реализовать пример работы функции chmod(). Путь к объекту и новые права доступа получать используя аргументы командной строки.
- Реализовать вывод списка объектов в указанном каталоге, используя функции opendir(), readdir(), closedir(). Имя каталога получать из командной строки.