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 показана
разница между чтением и поиском в
каталоге.  
Предыдущая
глава || Оглавление
|| Следующая глава 
  
 
 |