<<
>>

Пути

При организации файловой системы в виде дерева каталогов требуется некий способ указания файла. Для этого обычно используют два метода. В первом случае обращение к файлу выполняется по абсолютному пути, составленному из имен всех каталогов от корневого до того, в котором содержится файл, и имени самого файла.
Например, путь /usr/ast/mailbox означает, что корневой каталог содержит подкаталог us г, в который, в свою очередь, вложен подкаталог ast, где находится файл mailbox. Абсолютные пути всегда начинаются от корневого каталога и являются уникальными. В UNIX компоненты пути разделяются косой чертой (/). В Windows в качестве разделителя принята обратная косая черта (\). Таким образом, одно и то же имя пути в этих операционных системах будет выглядеть следующим образом:

+ Windows:

\usr\ast\mailbox

♦ UNIX:

/usr/ast/mailbox

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

Помимо абсолютного применяют и относительный путь.

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

ср /usr/ast/mailbox /usr/ast/mailbox.bak cp mailbox mailbox.bak

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

Некоторым программам требуется доступ к файлам независимо от того, какой каталог является в данный момент текущим.

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

Если программе проверки правописания понадобится большое количество файлов из каталога /usr/lib, она может, обратившись к операционной системе, поменять рабочий каталог на /usr/lib, после чего указывать просто имя dictionary в качестве первого аргумента системного вызова open. Явно указав свой рабочий каталог, программа может использовать в дальнейшем относительные имена, поскольку точно знает, где она находится в дереве каталогов.

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

Большинство операционных систем, поддерживающих иерархические каталоги, имеют специальные записи в каждом каталоге, означающие текущий (.) и родительский (. .) каталог. Чтобы продемонстрировать, как работает подобная запись, обратимся к дереву каталогов системы UNIX, показанному на рис. 5.5.

Рис.

5.5. Дерево каталогов системы UNIX

Для некоторого процесса каталог /usr/ast является рабочим. Тогда процесс может использовать две точки (. .), чтобы указать на необходимость переместиться вверх по дереву. Например, он может копировать файл /usr/lib/dictionary в собственный каталог при помощи команды

ср ../lib/dictionary

Две точки являются инструкцией системе подняться вверх (в каталог us г). После этого нужно открыть каталог lib и найти в нем файл dictionary.

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

ср usr/lib/dictionary .

Тем не менее с тем же успехом вы можете набрать любую из двух следующих команд:

ср /usr/lib/dictionary dictionary ср /usr/lib/dictionary /usr/ast/dictionary

Все три команды делают в точности одно и то же.

5.2.4.

<< | >>
Источник: Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание. 2007

Еще по теме Пути:

  1. Пути оттока
  2. Будьте верны своему пути
  3. Первая глава НА ПУТИ К ЧЕТВЕРТОМУ ИЗМЕРЕНИЮ
  4. Защита в пути
  5. По пути самосовершенствования
  6. По пути самосовершенствования
  7. Четыре пути к самоуважению
  8. Часть первая. Первые шаги на пути к успеху
  9. НА ПУТИ К ЗРЕЛОМУ СОЕДИНЕНИЮ
  10. ЛОВУШКИ НА ПУТИ ПЕРЕМЕН
  11. РЕТРО НА ПУТИ К БУДУЩЕМУ
  12. Тем, кто в Пути
  13. НАЧАЛО ПУТИ К УСПЕХУ
  14. Главлит на пути к монополии в цензуре
  15. 6.2. ВОСЕМЬ ШАГОВ НА ПУТИ К ИНТЕРПРЕТАЦИИ
  16. 13.1. Возможные пути развития общества
  17. Глава 2 Идеалы и пути к ним
  18. Плохая успеваемость, пути решения
  19. Как мы убрали препятствия с пути