Работа с каталогами JFS
Каталоги образуют иерархическую структуру, состоящую из файлов, файлов-связей и имен подкаталогов i-узлов. Глубина вложения каталогов не ограничивается. Дисковое пространство выделяется под каталоги блоками по 4096 байт, но операционная система выделяет для каталогов записи по 512 байт.
Процессы могут считывать содержимое каталогов так же, как содержимое обычных файлов. Однако записывать данные в каталоги может только ядро. По этой причине для создания и обслуживания каталогов разработаны специальные функции.
Структура каталогов JFS
Каталог состоит из последовательности записей. Запись каталога содержит три поля фиксированной длины (индекс, связанный с индексным узлом (i-узлом) файла, длину имени файла и количество байт в записи) и одно поле переменной длины для имени файла. Поле имени файла оканчивается символом NULL и дополняется незначащими символами до 4 байт. Максимальная длина имени файла - 255 байт.
Записи каталога имеют переменную длину, что позволяет задавать произвольные имена файлов. Однако объем пространства всех каталогов фиксирован.
Запись каталога не должна занимать более 512 байт. Если каталогу требуется более 512 байт, к первоначальной записи добавляется еще одна запись длиной 512 байт. Если в выделенном блоке данных все 512-байтовые записи заполнены, выделяется дополнительный блок данных (4096 байт).
При удалении файла пространство, занимаемое им в структуре каталога, добавляется к предшествующей записи каталога. Информация об удаленном каталоге хранится до тех пор, пока не будет создана новая запись, которую можно разместить в освободившейся области.
Каждый каталог содержит записи . (точка) и .. (две точки). Знак . (точка) указывает на i-узел самого каталога; запись каталога .. (две точки) - на i-узел родительского каталога. Программа mkfs инициализирует файловую систему, поэтому . (точка) и .. (две точки) в новом корневом каталоге указывают на корневой i-узел файловой системы.
Для каталогов предусмотрены следующие режимы доступа:
| Режим | Описание |
|---|---|
| read | Процессу разрешено чтение записей каталога |
| запись | Процессу разрешено создавать новые записи каталога или удалять старые с помощью функций creat, mknod, link и unlink |
| execute | Процессу разрешено использовать данный каталог в качестве текущего рабочего каталога или выполнять поиск в нижестоящем дереве файлов |
Работа с каталогами JFS - информация для программистов
- closedir
- Закрывает поток каталога и освобождает структуру, связанную с параметром указатель-на-каталог
- mkdir
- Создает каталоги
- opendir
- Открывает каталог, заданный в параметре имя-каталога, и связывает с ним поток каталога
- readdir
- Возвращает указатель на следующую запись каталога
- rewinddir
- Устанавливает указанный поток каталога в начало каталога
- rmdir
- Удаляет каталоги
- seekdir
- Задает позицию для выполнения следующей операции readdir в потоке каталога
- telldir
- Возвращает текущее расположение в указанном потоке каталога
Изменение текущего каталога процесса
При загрузке системы текущим каталогом первого процесса становится корневой каталог корневой файловой системы. Новые процессы, создаваемые с помощью функции fork, наследуют текущий каталог родительского процесса. Для изменения текущего каталога процесса предназначена функция chdir.
Функция chdir выполняет синтаксический анализ имени каталога, проверяя, действительно ли целевой объект является каталогом, и есть ли у владельца процесса права доступа к этому каталогу. После выполнения функции chdir процесс будет выполнять поиск всех полных имен, не начинающихся с косой черты (/), в новом текущем каталоге.
Изменение корневого каталога процесса
С помощью функции chroot можно установить каталог, заданный в параметре процесса путь, в качестве действующего корневого каталога. Все дочерние процессы того процесса, который вызвал функцию chroot, будут рассматривать указанный каталог как логический корневой каталог файловой системы.
При анализе всех полных имен, начинающихся с / (косой черты), применяется глобальный корневой каталог файловой системы. Это означает, что поиск всех таких имен начинается с этого корневого каталога.
Функции управления каталогами JFS
Файлы каталогов - это уникальные объекты, поэтому для управления каталогами разработаны специальные функции. Они перечислены ниже:
- chdir
- Позволяет перейти в другой каталог
- chroot
- Изменяет текущий корневой каталог
- getcwd и getwd
- Определяет путь к текущему каталогу
- mkdir
- Создает каталог
- opendir, readdir, telldir, seekdir, rewinddir и closedir
- Выполняют различные действия над каталогами
- rename
- Переименовывает каталог
- rmdir
- Удаляет каталог