Системное программирование, файлы и каталоги
Все программы должны соответствовать принятому стилю кодирования.
- В начале файла - заголовок с автором и лицензией;
- Перед каждой функцией - комментарий с описанием функции и аргументов;
- Текст программы разбит на "абзацы" с комментарием перед каждым "абзацем".
Все возвращаемые функциями значения должны проверяться. В случае ошибок выполнение программы должно аварийно завершаться с выдачей сообщения об ошибке и кодом завершения EXIT_FAILURE.
4. Файлы и каталоги
- Создайте собственный упрощенный аналог утилиты stat --terse.
> stat --help Использование: stat [ПАРАМЕТР]… ФАЙЛ… Отображает состояние файла или файловой системы. ... -t, --terse выводить информацию в компактной форме ... Значение --terse эквивалентно следующему ФОРМАТУ: %n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o %C ...Пример вывода:> stat --terse /etc/passwd /etc/passwd 2579 8 81a4 0 0 fe00 41955 1 0 0 1760356749 1758627864 1758627864 1758627864 4096 > ./task1 /etc/passwd /etc/passwd 2579 8 81a4 0 0 fe00 41955 1 0 0 1760356749 1758627864 1758627864 1758627864 4096 > stat --terse /dev/null /dev/null 0 0 21b6 0 0 5 4 1 1 3 1758628500 1758628500 1758628500 1758628433 4096 > ./task1 /dev/null /dev/null 0 0 21b6 0 0 5 4 1 1 3 1758628500 1758628500 1758628500 1758628500 4096
- Создайте собственный упрощенный аналог утилиты du:
> du --help Использование: du [КЛЮЧ]… [ФАЙЛ]… ... Суммирует использование дискового пространства каждого ФАЙЛА, с каталогами ...
Для упрощенного аналога достаточно выдавать использование дискового пространства для всех файлов, указанных в командной строке. Работать с каталогами не требуется.
Пример вывода (как du):> ls -l /usr/sbin/ac* lrwxrwxrwx 1 root root 10 сен 9 16:45 /usr/sbin/accept -> cupsaccept -rwxr-xr-x 1 root root 10800 дек 1 2023 /usr/sbin/accessdb -rwxr-xr-x 1 root root 55848 мая 9 2024 /usr/sbin/acpidump -rwxr-xr-x 1 root root 18568 мая 9 2024 /usr/sbin/acpi_genl > du /usr/sbin/ac* 0 /usr/sbin/accept 12 /usr/sbin/accessdb 56 /usr/sbin/acpidump 20 /usr/sbin/acpi_genl > ./task2 /usr/sbin/ac* 0 /usr/sbin/accept 12 /usr/sbin/accessdb 56 /usr/sbin/acpidump 20 /usr/sbin/acpi_genl
Между используемым дисковым пространством и именем файла табуляция (\t) - Создайте собственный упрощенный аналог утилиты readlink:
> readlink --help Использование: readlink [КЛЮЧ]… ФАЙЛ… Печатает значение символьной ссылки или каноническое имя файла ...
Пример вывода (как readlink):> ls -l /bin/a* lrwxrwxrwx 1 root root 13 июн 19 10:44 /bin/arch -> /usr/bin/arch lrwxrwxrwx 1 root root 15 июн 18 12:46 /bin/arping -> /usr/bin/arping lrwxrwxrwx 1 root root 21 авг 8 2023 /bin/awk -> /etc/alternatives/awk > readlink /bin/a* /usr/bin/arch /usr/bin/arping /etc/alternatives/awk > ./task3 /bin/a* /usr/bin/arch /usr/bin/arping /etc/alternatives/awk
- Создайте собственный упрощенный аналог утилиты chmod:
>chmod --help Использование: chmod [КЛЮЧ]... РЕЖИМ[,РЕЖИМ]… ФАЙЛ или: chmod [КЛЮЧ]… ВОСЬМ-РЕЖИМ ФАЙЛ… ...Для упрощенного аналога РЕЖИМ указывать в формате, который используется в выводе ls -l:> ls -l /etc/passwd -rw-r--r-- 1 root root 3435 авг 27 18:13 /etc/passwd
Т.е. ./mychmod 0755 файл или ./mychmod -rwxr-xr-x файл. - Создайте собственный аналог функции ftw() (рекурсивный обход файловой системы с вызовом callback-функции).