Работа с каталогами 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
Удаляет каталог