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