Главная страница Межпроцессное взаимодействие (состязание) ♦ Rename (переименование). Позволяет изменить имя файла. Присутствие вызова в операционной системе не является необходимым, так как обычно файл можно скопировать с новым именем, а старый экземпляр удалить. 5.2. Каталоги в файловых системах файлы обычно организуются в каталоги, которые, в свою очередь, в большинстве операционных систем также являются файлами. В данном разделе мы рассмотрим каталоги, их организацию, свойства и действия, которые могут быть выполнены над ними. 5.2.1. Иерархические системы каталогов обычно каталог содержит некоторое число записей, по одной записи на файл. Один из вариантов показан на рис. 5.3, а, где каждая запись каталога включает в себя имя файла, его атрибуты и адрес данных файла на диске. Другой вариант представлен на рис. 5.3, б. Здесь запись каталога хранит имя файла и указатель на структуру данных с атрибутами и дисковыми адресами. Широко применяются оба этих варианта.
games news work Структура данных, содержащая атрибуты Рис. 5.3. а - атрибуты хранятся в каталоге; б - атрибуты хранятся отдельно Когда открывается файл, операционная система ищет его запись в каталоге. Затем она извлекает и загружает в память атрибуты и дисковые адреса, либо из самой записи, либо из структуры, на которую запись ссылается. При всех последующих обращениях к файлу используется информация из памяти. Количество каталогов меняется от системы к системе. В простейшем варианте имеется один каталог, в котором хранятся все файлы всех пользователей, согласно рис. 5.4, а. Если пользователей много и они для файлов выберут одинаковые имена, конфликты и путаница быстро приведут систему в непригодное для работы состояние. Подобная схема применялась в микрокомпьютерных системах, но сейчас ее редко можно увидеть. Развитием этой идеи является двухуровневая иерархия, когда каждому пользователю выделяется отдельный каталог (рис. 5.4, б). Благодаря двухуровневой иерархии исчезают конфликты имен файлов между различными пользователями, но ее недостаточно для пользователей с большим числом файлов. Обычно пользователям бывает необходимо логически группировать свои файлы. Например, у профессора может быть набор файлов, образующих книгу, которую он пишет для одного курса, другое множество файлов, содержащее программы студентов для иного курса. Третий набор файлов может содержать исходные тексты разрабатываемого профессором нового компилятора, четвертая группа файлов - предложения различных грантов, а также электронная почта, расписание встреч, статьи, игры и т. д. Требуется некий гибкий способ, позволяющий объединять эти файлы в группы. Следовательно, нужна некая общая иерархия (то есть дерево каталогов). При таком подходе каждый пользователь может сам создать себе столько каталогов, сколько ему нужно, группируя свои файлы естественным образом. Этот подход проиллюстрирован на рис. 5.4, в. Здесь каталоги А, В и С, вложенные в корневой каталог, принадлежат различным пользователям, два из которых создали подкаталоги для проектов, над которыми они работают. Возможность создавать произвольное количество подкаталогов является мощным структурирующим инструментом, позволяющим пользователям организовать свою работу. По этой причине почти все современные файловые системы реализуются подобным образом. Каталог Файл Корневой С \<- Каталог-Н А пользователя Корневой каталог Подкаталоги пользователя Рис. 5.4. Три варианта устройства файловой системы: а - один каталог на всех пользователей; б - отдельный каталог для каждого пользователя; а - дерево каталогов для каждого из пользователей. Буквами обозначены владельцы каталога или файла 5.2.2. Пути При организации файловой системы в виде дерева каталогов требуется некоторый способ указания файла. Для этого обычно используется два различных метода. В первом случае обращение к файлу выполняется по абсолютному имени пути, составленному из имен всех каталогов от корневого до того, в котором содержится файл, и имени самого файла. Например, путь/usr/ast/mailbox означает, что корневой каталог содержит подкаталог usr, в который, в свою очередь, вложен подкаталог ast, где находится файл mailbox. Абсолютные имена путей всегда начинаются от корневого каталога и являются уникальными. В системе UNIX компоненты пути разделяются косой чертой /. В Windows в качестве разделителя принята обратная косая черта \. В системе MULTICS использовался символ >. Таким образом, одно и то же имя пути в этих трех операционных системах будет выглядеть следующим образом: Wi ndows\usr\ast\mai1 box UNIX/usr/ast/mailbox MULTICS>usr>ast>ma1lbox Если первой буквой имени пути был разделитель, это означало, независимо от используемого в качестве разделителя символа, что путь абсолютный. Применяется и относительное имя пути. Оно используется вместе с концепцией рабочего каталога (также называемого текущим каталогом). Пользователь может назначить один из каталогов текущим рабочим каталогом. В этом случае все имена путей без начального символа разделителя считаются относительными и отсчитываются относительно текущего каталога. Например, если текущим каталогом является /usr/ast, тогда к файлу с абсолютным путем /usr/ast/mailbox можно обратиться просто как к mailbox. Другими словами, команда UNIX ср /usr/ast/mailbox /usr/ast/mailbox.bak и команда ср mailbox mailbox.bak выполнят одно и то же действие, если рабочим каталогом является /usr/ast. Относительная форма часто оказывается более удобной, но она подразумевает то же самое, что и абсолютная. Некоторым программам бывает нужно получить доступ к файлам независимо от того, какой каталог является в данный момент текущим. В этом случае они всегда должны указывать абсолютные имена. Например, программе проверки правописания может понадобиться для выполнения работы прочитать файл /usr/lib/dictionary. В этом случае она должна использовать полное, абсолютное имя файла, так как она не знает, каким будет рабочий каталог при ее вызове. Абсолютное имя файла будет работать всегда, независимо от того, какой каталог является текущим в данный момент. Если программе проверки правописания понадобится большое количество файлов из каталога /usr/lib, она может, обратившись к операционной системе, поменять рабочий каталог на /usr/lib, после чего указывать просто имя dictionary для первого аргумента системного вызова open. Явно указав свой рабочий каталог.
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |