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