Декабрь, 8

Знаменатель

(c) Larry Ewing, Simon Budig, Garrett LeSage
с 1994 г.

Кафедра Информатики и Математического Обеспечения

ПетрГУ | ИМиИТ | О кафедре | Проекты | Лаборатория ИТС | Семинары НФИ/AMICT
Сотрудники | Учебный процесс | Табель-календарь | Курсовые и выпускные работы
Вычислительные ресурсы | Публикации | Архив новостей | Контактная информация (English)

Системное программирование, файлы и каталоги

Все программы должны соответствовать принятому стилю кодирования.

Все возвращаемые функциями значения должны проверяться. В случае ошибок выполнение программы должно аварийно завершаться с выдачей сообщения об ошибке и кодом завершения EXIT_FAILURE.

4. Файлы и каталоги

  1. Создайте собственный упрощенный аналог утилиты 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
    
  2. Создайте собственный упрощенный аналог утилиты 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)
  3. Создайте собственный упрощенный аналог утилиты 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
    
  4. Создайте собственный упрощенный аналог утилиты 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 файл.
  5. Создайте собственный аналог функции ftw() (рекурсивный обход файловой системы с вызовом callback-функции).