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

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

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

Упражнение 3.1

Что означают следующие значения прав доступа: 0761, 0777, 0555, 0007 и 0707 ?

Упражнение 3.2

Замените восьмеричные значения из упражнения 3.1 эквивалентными символьными выражениями

Упражнение 3.3

Напишите процедуру lsoct, которая переводит набор прав доступа из формы, получаемой на выходе команды ls -l (например rwxr-xr-x) в эквивалентные восьмеричные значения. Затем напишите обратную процедуру octls.

Упражнение 3.4

Следующие примеры показывают, как команда ls выводит на экран права доступа set user id и set group id соответственно: r-sr-xr-x и r-xr-sr-x. При помощи команды ls -l найдите в каталогах /bin, /etc и /usr/bin файлы с необычными правами доступа (если это командные файлы оболочки и у вас есть права на чтение этих файлов, посмотрите, что они делают и надежно ли они защищены). Более опытные читатели могут ускорить поиск, воспользовавшись программой grep. Если вам не удастся найти файлы с необычными правами доступа, объясните, почему это произошло.

Упражнение 3.5

A

Предположим, что действующий идентификатор пользователя (euid) процесса равен 100, а его действующий идентификатор группы (egid) равен 200. Владельцем файла testfile является пользователь с идентификатором 101, а идентификатор группы файла (gid) равен 200. Для каждого возможного режима доступа (только для чтения, только для записи, для записи-чтения) определите, будет ли успешным вызов open, если файл testfile имеет следующие права доступа:

B

Что произойдет, если real user id (истинный идентификатор пользователя) процесса кавен 101, а real group id (истинный идентификатор группы) равен 201 ?

Упражнение 3.6

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

Упражнение 3.7

Напишите программу setperm, которая имеет два аргумента командной строки. Первый - имя файла, второй - набор прав доступа в восьмеричной форме или в форме, выводимой командой ls. Если файл существует, то команда setperm должна попытаться поменять права доступа к файлу на заданные. Используйте процедуру lsoct, которую вы разработали в упражнении 3.3

Упражнение 3.8

Напишите свою версию программы rm, используя вызов unlink. Ваша программа должна проверять, имеет ли пользователь право записи в файл при помощи вызова access и в случае его отсутствия запрашивать подтверждение перед попыткой удаления ссылки на файл (почему?). Будьте осторожны при использовании программы!

Упражнение 3.9

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

Упражнение 3.10

Напишите программу slowwatch, которая периодически проверяет время изменения заданного файла (она не должна завершаться ошибкой, если файл не существует). При изменении файла программа slowwatch должна копировать его на свой стандартный вывод. Как можно убедиться (или предположить), что обновление файла закончено до того, как он будет скопирован ?

Упражнение 3.11

Приведенную задачу можно решить проще. Если вы знаете, как это сделать, напишите эквивалент этой программы при помощи командного интерпретатора.

Упражнение 3.12

Напишите свою версию команды chmod, используя ее описание в справочном руководстве вашей системы UNIX.