Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка ПО ОСРВ заочники.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
8.72 Mб
Скачать

3.9.7. Имя файла

Когда вы создаете файл, вы присваиваете ему имя. С помощью команды mv можно I изменять имя файла. Кроме того, команда mv может перемещать файл из одного каталога

в другой.

Установление имени файла. Системный вызов creat устанавливает имя и начальный

режим для файла.

Изменение имени файла. Системный вызов rename изменяет имя файла. При обращении к вызову задаются два аргумента, старое и новое имя:

rename

НАЗНАЧЕНИЕ

Изменение имени и/или перемещение файла

INCLUDE

#include < stdio.h >

ИСПОЛЬЗОВАНИЕ АРГУМЕНТЫ

int result = rename(char *old, char "new)

old - старое имя файла или каталога

new - новое маршрутное имя для файла или каталога

КОДЫ ВОЗВРАТА

-1 -при ошибке

0 - при успехе

Заключение

Основные идеи

• На диске находятся каталоги и файлы. Файлы имеют содержимое и свойства. В файле могут содержаться данные некоторого типа. Каталог может содержать только список имен файлов.

• Имена в каталогах соотнесены файлам и другим каталогам. В ядре есть системные вызовы для чтения содержимого каталогов, для чтения свойств (атрибутов) файлов и для модификации большинства атрибутов файлов.

• Тип файла, права доступа и три специальных атрибута хранятся как двоичный код некоторого целого числа. Для выборки определенных разрядов используется техника поразрядного маскирования.

• Собственник и группа файла хранятся в числовом представлении. Соответствие меж­ду этими числами и символьными именами собственника и группы устанавливается через базы данных passwd и group.

Что дальше?

Каталог - это список файлов и каталогов. Каталоги связаны между собой в древовидную структуру. Как происходит работа с этим деревом? Как связываются между собой каталоги? В следующей главе мы рассмотрим внутреннюю структуру дерева.

Визуальнй итог

Исследования

3.1 Длина d_name[ ]. В определении структуры struct dirent длина символьного массива И d_name[ ] была указана равной J для некоторых систем и может быть 255 символов I для других систем. Какова будет фактическая длина? Почему приведены такие странные числа? Почему не использована нотация вида:, char *?

    1. Защита файлов от самого себя. Режим доступа вида:-------rwx, который вы можете установить с помощью команды chmod 007 filename, вполне допустим, но явно весь-В ма эксцентричен. Он гарантирует все остальным пользователям право на чтение, запись и исполнение в отношении файла filename, но не предоставляет таких прав ни собственнику, ни группе. Установите такой режим для некоторого файла. Смогли ли вы прочитать такой файл? Поэкспериментируйте с различными комбинациями, чтобы представить себе логику ядра, которая используется при определении прав доступа при работе системного вызова open. Если у вас есть возможность доступа к исходным

кодам ядра, найдите ту часть кода, которая отвечает за права доступа, и проверьте -правильны ли ваши догадки относительно логики работы.

3.3 Идентификаторы и пользовательские имена. Каждый пользователь имеет пользова­тельское имя и каждому имени сопоставлен пользовательский числовой идентифика­тор. Возможен ли случай, когда двум различным пользовательским именам сопостав­лен один и тот же числовой идентификатор пользователя? Возможен ли случай, когда одному и тому же пользовательскому имени сопоставлены два различных числовых идентификатора пользователя? Если у вас есть права доступа root на машине, то по­пробуйте поэкспериментировать с различными комбинациями. Заведите учетные записи на двух различных пользователей, для которых укажите один и тот же UID, но для каждого пользователя должны быть установлены свое пользовательское имя и свой пароль. Могут ли каждый из пользователей модифицировать файлы у другого? Что должна показать при выводе команда who? Что покажет команда Is -I? Что пока­жет команда id? А как быть с электронной почтой? Что дал вам эксперимент для по­нимания того, как работают эти команды?

Можете ли придумать ситуации, где было бы полезным использовать множество пользовательских имен при одном и том же пользовательском идентификаторе?

3.4 Специальные разряды и каталоги. Каталоги, как и все файлы в Unix, имеют полный набор разрядов для определения прав доступа, включая разряды set-user-ID, set-group-ID. Возникает вот какая задача. Если вы установите в отношении каталога разряд set-group-ID, то повлияет ли он на работу с каталогом? Если да, то как и поче­му? Если нет, то подумайте, как можно будет использовать этот разряд?

3.5 Исполнимый код и права на исполнение. У каждого файла есть три разряда для уста­новки права на исполнения для собственника, группы и для всех остальных пользова­телей. Вы можете установить право на исполнение для любого файла, для обыкновен­ных текстовых файлов, даже для тех, которые содержат перечень товаров в продо­вольственном магазине. Но, с другой стороны, может быть файл, который содержит исполнимый код, напри­мер, a.out, и который получен после компиляции С-программы. Для этого файла может быть сброшен разряд на исполнение. Объясните разницу между идеями испол­нимого кода и правами на исполнение для файла. Связаны ли эти идеи между собой? Почитайте документацию по команде file.

3.6 Входные имена и пользовательские ID. Каждый пользователь имеет символьное поль­зовательское имя и числовой идентификатор — UID. Зачем? Не было бы более про­стым указывать в качестве владельца файла символьное имя пользователя? Почему бы для каждого пользователя не завести только один числовой идентификатор? В чем проблемы с двумя системами идентификации? Какие преимущества предоставляют две системы идентификации? Если бы вы проектировали собственную операционную систему, то как бы вы поступили в отношении этого вопроса?

3.7 В документации на dirent, текст которой был приведен, была сделана ссылка на систем­ный вызов getdents(2). Что делает этот вызов и какое отношение он имеет к readdir?

3.8 Обычно в листинге команды Is -I каталоги представлены с такими правами доступа: drwxr-xr-x.

При посимвольном разборе этого поля слева направо обнаруживаем: тип файла -каталог, собственник каталога может выполнять операции чтения, записи и исполне­ния в отношении каталога, члены группы и все остальные пользователи могут выпол­нять только операции чтения и исполнения в отношении каталога.

Что означает право на "исполнение" в отношении каталога? Файл может содержал код, составленный из команд конкретной машины, или код, составленный на "скриптовом" языке. Имеет смысл маркировать такой файл как "исполняемый", поскольку компьютер может непосредственно исполнять программу на машинном языке или за­пустить интерпретатор для исполнения скрипта. Каталог же - это просто список имен файлов, и он не может быть запущен на исполнение. Так что же означает разряд, дающий право на исполнение каталога? Почему он полезен? Поэкспериментируйте с командной chmod и выключите разряд на исполнение для каталога и посмотрите, что получится в данной ситуации.

3.9 Работа с вашим терминалом. Пользователи связываются с системой с помощью терми­налов или терминальных эмуляционных программ. Каждый терминал представлен как файл в каталоге /dev. Выполните следующие команды: Is -1 /dev/tty* j more, В результате получим вывод списка всех терминальных устройств и их свойств. Фай­лы, которые представляют терминалы, как и обычные файлы, имеют собственника, Собственником терминала будет тот пользователь, который вошел в систему через этот терминал. Терминальные устройства не используют root в качестве собственни­ка. Собственник терминала изменяется программой login. Обратитесь к исходному коду программы login и отыщите в ней код, где происходит изменение собственника. Что изменяет программа, когда собственность возвращается опять в root, когда вы будете выходить из системы?