Каталоги - это составная часть иерархической файловой системы. Они связывают имена файлов и подкаталогов с i-узлами. Глубина вложения каталогов не ограничивается. Дисковое пространство выделяется под каталоги блоками.
Процессы могут считывать содержимое каталогов так же, как содержимое обычных файлов. Однако запись в каталоги зарезервирована за ядром. По этой причине для создания и обслуживания каталогов разработаны специальные функции.
Дополнительная информация о каталогах приведена в следующих разделах:
Каталог представляет собой набор идентификаторов объектов. Считается, что эти объекты содержатся в каталоге. Длина всех идентификаторов одинакова. В идентификаторе содержатся номер i-узла, имя длиной до 22 байт, поле длины имени и поле продолжения идентификатора на случай, если имя файла не поместится в один идентификатор полностью.
Идентификаторы хранятся в каталоге в виде дерева B+, отсортированного по именам. Сведения о данном (.) и родительском (..) каталогах хранятся непосредственно в 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, Файловые системы и каталоги
Создание связей - Информация для программистов