Системная функция mknod создает в
системе специальные файлы, в число
которых включаются поименованные
каналы, файлы устройств и каталоги.
Она похожа на функцию creat в том, что
ядро выделяет для файла индекс.
Синтаксис вызова системной функции
mknod: где pathname - имя создаваемой вершины
в иерархической структуре файловой
системы, type and permissions - тип вершины
(например, каталог) и права доступа
к создаваемому файлу, а dev указывает
старший и младший номера
устройства для блочных и
символьных специальных файлов (глава 10). На Рисунке 5.13
приведен алгоритм, реализуемый
функцией mknod при создании новой
вершины. Рисунок 5.13.
Алгоритм создания новой вершины Ядро просматривает
файловую систему в поисках имени
файла, который оно собирается
создать. Если файл еще пока не
существует, ядро назначает ему
новый индекс на диске и записывает
имя нового файла и номер индекса в
родительский каталог. Оно
устанавливает значение поля типа
файла в индексе, указывая, что файл
является каналом, каталогом или
специальным файлом. Наконец, если
файл является специальным файлом
устройства блочного или
символьного типа, ядро записывает в
индекс старший и младший номера
устройства. Если функция mknod
создает каталог, он будет
существовать по завершении
выполнения функции, но его
содержимое будет иметь неверный
формат (в каталоге будут
отсутствовать записи с именами
"." и ".."). В упражнении
5.33
5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ
ФАЙЛОВ
mknod(pathname,type and permissions,dev)
алгоритм создания новой вершины
входная информация: вершина (имя файла)
тип файла
права доступа
старший, младший номера устройства
(для блочных и символьных специальных
файлов)
выходная информация: отсутствует
{
если (новая вершина не является поименованным каналом
и пользователь не является суперпользователем)
возвратить (ошибку);
получить индекс вершины, являющейся родительской для
новой вершины (алгоритм namei);
если (новая вершина уже существует)
{
освободить родительский индекс (алгоритм iput);
возвратить (ошибку);
}
назначить для новой вершины свободный индекс из файловой
системы (алгоритм ialloc);
создать новую запись в родительском каталоге: включить
имя новой вершины и номер вновь назначенного индекса;
освободить индекс родительского каталога (алгоритм
iput);
если (новая вершина является блочным или символьным спе-
циальным файлом)
записать старший и младший номера в структуру индек-
са;
освободить индекс новой вершины (алгоритм iput);
}
алгоритм смены каталога входная информация: имя нового каталога выходная информация: отсутствует { получить индекс для каталога с новым именем (алгоритм namei); если (индекс не является индексом каталога или же про- цессу не разрешен доступ к файлу) { освободить индекс (алгоритм iput); возвратить (ошибку); } снять блокировку с индекса; освободить индекс прежнего текущего каталога (алгоритм iput); поместить новый индекс в позицию для текущего каталога в пространстве процесса; } |
Рисунок 5.14. Алгоритм смены текущего каталога
Предыдущая глава || Оглавление || Следующая глава