4.3 КАТАЛОГИ
Из главы 1 напомним, что каталоги
являются файлами, из которых
строится иерархическая структура
файловой системы; они играют важную
роль в превращении имени файла в
номер индекса. Каталог - это файл,
содержимым которого является набор
записей, состоящих из номера
индекса и имени файла, включенного
в каталог. Составное имя - это
строка символов, завершающаяся
пустым символом и разделяемая
наклонной чертой ("/") на
несколько компонент. Каждая
компонента, кроме последней, должна
быть именем каталога, но последняя
компонента может быть именем файла,
не являющегося каталогом. В версии V
системы UNIX длина каждой компоненты
ограничивается 14 символами; таким
образом, вместе с 2 байтами,
отводимыми на номер индекса, размер
записи каталога составляет 16 байт.
Смещение в байтах
внутри каталога |
Номер индекса
(2 байта) |
Имя файла |
0 |
83 |
. |
16 |
2 |
.. |
32 |
1798 |
init |
48 |
1276 |
fsck |
64 |
85 |
clri |
80 |
1268 |
motd |
96 |
1799 |
mount |
112 |
88 |
mknod |
128 |
2114 |
passwd |
144 |
1717 |
umount |
160 |
1851 |
checklist |
176 |
92 |
fsdbld |
192 |
84 |
config |
208 |
1432 |
getty |
224 |
0 |
crash |
240 |
95 |
mkfs |
256 |
188 |
inittab |
Рисунок 4.10. Формат
каталога /etc
На Рисунке 4.10 показан
формат каталога "etc". В каждом
каталоге имеются файлы, в качестве
имен которых указаны точка и две
точки ("." и "..") и номера
индексов у которых совпадают с
номерами индексов данного каталога
и родительского каталога,
соответственно. Номер индекса для
файла "." в каталоге "/etc"
имеет адрес со смещением 0 и
значение 83. Номер индекса для файла
".." имеет адрес со смещением 16
от начала каталога и значение 2.
Записи в каталоге могут быть
пустыми, при этом номер индекса
равен 0. Например, запись с адресом
224 в каталоге "/etc" пустая,
несмотря на то, что она когда-то
содержала точку входа для файла с
именем "crash". Программа mkfs
инициализирует файловую систему
таким образом, что номера индексов
для файлов "." и ".." в
корневом каталоге совпадают с
номером корневого индекса файловой
системы.
Ядро хранит данные в каталоге так
же, как оно это делает в файле
обычного типа, используя индексную
структуру и блоки с уровнями прямой
и косвенной адресации. Процессы
могут читать данные из каталогов
таким же образом, как они читают
обычные файлы, однако
исключительное право записи в
каталог резервируется ядром,
благодаря чему обеспечивается
правильность структуры каталога.
Права доступа к каталогу имеют
следующий смысл: право чтения дает
процессам возможность читать
данные из каталога; право записи
позволяет процессу создавать новые
записи в каталоге или удалять
старые (с помощью системных
операций creat, mknod, link и unlink), в
результате чего изменяется
содержимое каталога; право
исполнения позволяет процессу
производить поиск в каталоге по
имени файла (поскольку
"исполнять" каталог
бессмысленно). На примере Упражнения 4.6 показана
разница между чтением и поиском в
каталоге.
Предыдущая
глава || Оглавление
|| Следующая глава
|