Имена файлов

Когда файловая система организована в виде дерева каталогов, нужен какой-нибудь способ указания имен файлов. Чаще всего для этого используются два метода. В первом методе каждому файлу дается абсолютное имя (полное имя), состоящее из пути от корневого каталога к файлу.
Например, имя /usr/ast/mailbox означает, что корневой каталог содержит подкаталог usr, который, в свою очередь, содержит подкаталог ast, в котором содержится файл mailbox. Абсолютные имена файлов всегда начинаются с названия корневого каталога и являются уникальными именами. В системе UNIX компоненты пути разделяются символом «слеш» — /. В системе Windows разделителем служит символ «обратный слеш» — \. В системе MULTICS этим разделителем служила угловая скобка — >. В этих трех системах одно и то же имя будет выглядеть следующим образом:

Windows \usr\ast\mailbox UNIX /usr/ast/mailbox MULTICS >usr>ast>mailbox

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

Другой разновидностью имени является относительное имя. Оно используется совместно с понятием рабочего каталога (называемого также текущим каталогом). Пользователь может определить один каталог в качестве текущего, и тогда все имена файлов станут рассматриваться относительно рабочего каталога и не будут начинаться с корневого каталога. К примеру, если текущим рабочим каталогом будет /usr/ast, то к файлу, имеющему абсолютное имя /usr/ast/mailbox, можно будет обращаться, просто указывая mailbox. Иначе говоря, команда UNIX

cp /usr/ast/mailbox /usr/ast/mailbox.bak

и команда

cp mailbox mailbox.bak

делают одно и то же, если рабочим каталогом является /usr/ast. Относительная форма указания имен зачастую более удобна, но при этом делает то же самое, что и абсолютная форма.

Некоторым программам нужен доступ к конкретному файлу безотносительно того, какой каталог является рабочим. В таком случае им всегда нужно использовать абсолютные имена. К примеру, программе проверки правописания в процессе работы может понадобиться чтение файла /usr/lib/dictionary. В таком случае ей следует использовать полное, абсолютное имя, поскольку она не знает, какой каталог будет при ее вызове рабочим. Абсолютное имя файла будет работать всегда, независимо от того, какой именно каталог будет рабочим.

Разумеется, если программа проверки правописания нуждается в большом количестве файлов из каталога /usr/lib, то альтернативным подходом будет следующий: использовать системный вызов для смены рабочего каталога на /usr/lib, а затем в качестве первого параметра системного вызова open можно будет использовать лишь имя dictionary. За счет явного изменения рабочего каталога программа точно знает, в каком месте дерева каталогов она работает, поэтому она может использовать относительные пути к файлам.

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

Большинство операционных систем, поддерживающих иерархическую систему каталогов, имеют в каждом каталоге специальные элементы «.» и «..», которые обычно произносятся как «точка» и «точка-точка». Точка является ссылкой на текущий каталог, а двойная точка — на родительский каталог (за исключением корневого каталога, где этот элемент является ссылкой на сам корневой каталог). Чтобы увидеть, как они используются, обратимся к дереву каталогов системы UNIX (рис. 4.5). Пусть у нас есть некий процесс, для которого каталог /usr/ast является рабочим. Чтобы переместиться вверх по дереву, он может использовать обозначение «...». К примеру, он может копировать файл /usr/lib/dictionary в собственный каталог при помощи команды

cp ../lib/dictionary .

Первый указанный путь предписывает системе подняться вверх по дереву (к каталогу usr), затем опуститься вниз к каталогу lib и найти в нем файл dictionary.

Второй аргумент (точка) заменяет имя текущего каталога. Когда в качестве последнего аргумента команда cp получает имя каталога (включая точку), она копирует все файлы в этот каталог. Разумеется, куда более привычным способом копирования будет использование полного абсолютного имени пути к файлу-источнику:

cp /usr/lib/dictionary .

Здесь использование точки избавляет пользователя от необходимости второй раз набирать имя dictionary. Тем не менее, если набрать

cp /usr/lib/dictionary dictionary

Рис. 4.5. Дерево каталогов UNIX


команда будет работать так же, как и при наборе ср /и5г/11Ь/(Лс11опагу /и5г/а51/(Лс11опагу

Все эти команды приводят к одному и тому же результату.

4.2.4.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Имена файлов:

  1. Имена и фамилии
  2. Имена и фамилии
  3. ЗАПОМИНАЙТЕ ИМЕНА ЛЮДЕЙ
  4. Имена, названия
  5. Ваши действия
  6. Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание, 2007
  7. Необходимые шаги
  8. Отбор в тексте единиц анализа
  9. Григорьев Ю.А., Ревунков Г.И.. Банки данных, 2002
  10. Новая политическая социология.
  11. Буквы А, И, С
  12. М.Руссинович, Д.Соломон. Внутреннее устройство Microsoft Windows (главы 1–4), 2005
  13. Задачи и упражнения
  14. Как создать алтарь мира
  15. Любимые звуки ангелов
  16. ТРАНЗИТ ЮПИТЕРА ЧЕРЕЗ ЗНАК ДЕВЫ
  17. 11.2.1. Область реализации права на поиск, получение и потребление информации в Интернет
  18. Глава 1. ЖАНРООБРАЗУЮЩИЕ ФАКТОРЫ В ЖУРНАЛИСТИКЕ