алгоритм создания новой вершины входная информация: вершина (имя файла) тип файла права доступа старший, младший номера устройства (для блочных и символьных специальных файлов) выходная информация: отсутствует { если (новая вершина не является поименованным каналом и пользователь не является суперпользователем) возвратить (ошибку); получить индекс вершины, являющейся родительской для новой вершины (алгоритм namei); если (новая вершина уже существует) { освободить родительский индекс (алгоритм iput); возвратить (ошибку); } назначить для новой вершины свободный индекс из файловой системы (алгоритм ialloc); создать новую запись в родительском каталоге: включить имя новой вершины и номер вновь назначенного индекса; освободить индекс родительского каталога (алгоритм iput); если (новая вершина является блочным или символьным спе- циальным файлом) записать старший и младший номера в структуру индек- са; освободить индекс новой вершины (алгоритм iput); } |
Ядро просматривает файловую систему в поисках имени файла, который оно собирается создать. Если файл еще пока не существует, ядро назначает ему новый индекс на диске и записывает имя нового файла и номер индекса в родительский каталог. Оно устанавливает значение поля типа файла в индексе, указывая, что файл является каналом, каталогом или специальным файлом. Наконец, если файл является специальным файлом устройства блочного или символьного типа, ядро записывает в индекс старший и младший номера устройства. Если функция mknod создает каталог, он будет существовать по завершении выполнения функции, но его содержимое будет иметь неверный формат (в каталоге будут отсутствовать записи с именами "." и ".."). В упражнении 5.33 рассматриваются шаги, необходимые для преобразования содержимого каталога в правильный формат.