Архитектура Unix

       

. Каталог, создание которого не завершено



Рисунок 5.37. Каталог, создание которого не завершено

main(argc,argv) int argc; char *argv[]; { if (argc != 2) { printf("введите: команда имя каталога\n"); exit(); } /* права доступа к каталогу: запись, чтение и ис- полнение разрешены для всех */ /* только суперпользователь может делать следую- щее */ if (mknod(argv[1],040777,0) == -1) printf("mknod завершилась неудачно\n"); }


*14. Рассмотрим программу (Рисунок 5.37), которая создает каталог с неверным форматом (в каталоге отсутствуют записи с именами "." и ".."). Попробуйте, находясь в этом каталоге, выполнить несколько команд, таких как ls -l, ls -ld, или cd. Что произойдет при этом?

15. Напишите программу, которая выводит для файлов, имена которых указаны в качестве параметров, информацию о владельце, типе файла, правах доступа и времени доступа. Если файл (параметр) является каталогом, программа должна читать записи из каталога и выводить вышеуказанную информацию для всех файлов в каталоге.

16. Предположим, что у пользователя есть разрешение на чтение из каталога, но нет разрешения на исполнение. Что произойдет, если каталог использовать в качестве параметра команды ls, заданной с опцией "-i"? Что будет, если указана опция "-l"? Поясните свои ответы. Ответьте на вопрос, сформулированный для случая, когда есть разрешение на исполнение, но нет разрешения на чтение из каталога.

17. Сравните права доступа, которые должны быть у процесса для выполнения следующих действий, и прокомментируйте:

  • Для создания нового файла требуется разрешение на запись в каталог.
  • Для "создания" существующего файла требуется разрешение на запись в файл.
  • Для удаления связи файла с каталогом требуется разрешение на запись в каталог, а не в файл.

*18. Напишите программу, которая навещает все каталоги, начиная с текущего. Как она должна управлять циклами в иерархии каталогов?

19. Выполните программу, приведенную на Рисунке 5.38, и объясните, что при этом происходит в ядре. (Намек: выполните команду pwd, когда программа закончится).

20. Напишите программу, которая заменяет корневой каталог указанным каталогом, и исследуйте дерево каталогов, доступное для этой программы.



21. Почему процесс не может отменить предыдущий вызов функции chroot? Измените конкретную реализацию процесса таким образом, чтобы он мог менять текущее значение корня на предыдущее. Какие у этой возможности преимущества и неудобства?

22. Рассмотрим простой пример канала (Рисунок 5.19), когда процесс записывает в канал строку "hello" и затем считывает ее. Что произошло бы, если бы массив для записи данных в канал имел размер 1024 байта вместо 6 (а объем считываемых за одну операцию данных оставался равным 6)? Что произойдет, если порядок вызова функций read и write в программе изменить, поменяв функции местами?



Содержание раздела