Книга: Архитектура операционной системы UNIX

5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ

5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ

Системная функция mknod создает в системе специальные файлы, в число которых включаются поименованные каналы, файлы устройств и каталоги. Она похожа на функцию creat в том, что ядро выделяет для файла индекс. Синтаксис вызова системной функции mknod:

mknod(pathname, type and permissions, dev)

где pathname — имя создаваемой вершины в иерархической структуре файловой системы, type and permissions — тип вершины (например, каталог) и права доступа к создаваемому файлу, а dev указывает старший и младший номера устройства для блочных и символьных специальных файлов (глава 10). На Рисунке 5.13 приведен алгоритм, реализуемый функцией mknod при создании новой вершины.

алгоритм создания новой вершины
входная информация:
 вершина (имя файла)
 тип файла
 права доступа
 старший, младший номера устройства (для блочных и символьных специальных файлов)
выходная информация: отсутствует
{
 if (новая вершина не является поименованным каналом и пользователь не является суперпользователем)
  return (ошибку);
 получить индекс вершины, являющейся родительской для новой вершины (алгоритм namei);
 if (новая вершина уже существует) {
  освободить родительский индекс (алгоритм iput);
  return (ошибку);
 }
 назначить для новой вершины свободный индекс из файловой системы (алгоритм ialloc);
 создать новую запись в родительском каталоге;
 включить имя новой вершины и номер вновь назначенного индекса;
 освободить индекс родительского каталога (алгоритм iput);
 if (новая вершина является блочным или символьным специальным файлом)
  записать старший и младший номера в структуру индекса;
 освободить индекс новой вершины (алгоритм iput);
}

Рисунок 5.13. Алгоритм создания новой вершины

Ядро просматривает файловую систему в поисках имени файла, который оно собирается создать. Если файл еще пока не существует, ядро назначает ему новый индекс на диске и записывает имя нового файла и номер индекса в родительский каталог. Оно устанавливает значение поля типа файла в индексе, указывая, что файл является каналом, каталогом или специальным файлом. Наконец, если файл является специальным файлом устройства блочного или символьного типа, ядро записывает в индекс старший и младший номера устройства. Если функция mknod создает каталог, он будет существовать по завершении выполнения функции, но его содержимое будет иметь неверный формат (в каталоге будут отсутствовать записи с именами «.» и «..»). В упражнении 5.33 рассматриваются шаги, необходимые для преобразования содержимого каталога в правильный формат.

Оглавление книги


Генерация: 0.780. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз