ЛР1. Пользователи и группы, права доступа, обработка каталогов.

Задание

  1. (30) Разработать программу, которая по имени системного пользователя возвращает имена его "одногруппников", то есть пользователей, являющихся членами хотя-бы одной из групп, в которую входит исходный пользователь.
  2. (20) Разработать программу, которая рекурсивно, с использованием функций dirent.h, выводит в иерархическом представлении содержимое каталога, имя которого ей передано. Каждый выводимый элемент должен сопровождаться информацией о типе, хозяине, группе, правах доступа в человекочитаемом формате, например:
    файл: dir1/dir2/f1
    тип: fifo-канал
    хозяин: user1 (123)
    группа: group1 (321)
    права хозяина: чтение, запись
    права группы: нет прав
    права остальных: нет прав
    спецправа: SUID (запуск от имени хозяина), Sticky (пожелание сохранения в ОЗУ после завершения)
    
    Если содержимое очередного подкаталога оказывается недоступным - сообщить об этом факте для каждого каталога и причинах его возникновения.
  3. (30+20) Разработать программу, которая создает копию переданного ей каталога с любой глубиной вложенности, с правами на файлы/каталоги, идентичными исходным. Символические ссылки и подкаталоги создаются как есть. Вместо файлов других типов создаются пустые регулярные файлы.