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


         

СОЗДАНИЕ ФАЙЛА


Системная функция open дает процессу доступ к существующему файлу, а системная функция creat создает в системе новый файл. Синтаксис вызова системной функции creat: fd = creat(pathname,modes);

где переменные pathname, modes и fd имеют тот же смысл, что и в системной функции open. Если прежде такого файла не существовало, ядро создает новый файл с указанным именем и указанными правами доступа к нему; если же такой файл уже существовал, ядро усекает файл (освобождает все существующие блоки данных и устанавливает размер файла равным 0) при наличии соответствующих прав доступа к нему . На Рисунке 5.12 приведен алгоритм создания файла.

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

Рисунок 5.12. Алгоритм создания файла

Ядро проводит синтаксический анализ имени пути поиска, используя алгоритм namei и следуя этому алгоритму буквально, когда речь идет о разборе имен каталогов. Однако, когда дело касается последней компоненты имени пути поиска, а именно идентификатора создаваемого файла, namei отмечает смещение в байтах до первой пустой позиции в каталоге и запоминает это смещение в пространстве процесса. Если ядро не обнаружило в каталоге компоненту имени пути поиска, оно в конечном счете впишет имя компоненты в только что найденную пустую позицию. Если в каталоге нет пустых позиций, ядро запоминает смещение до конца каталога и создает новую позицию там. Оно также запоминает в пространстве процесса индекс просматриваемого каталога и держит индекс заблокированным; каталог становится по отношению к новому файлу родительским каталогом. Ядро не записывает пока имя нового файла в каталог, так что в случае возникновения ошибок ядру приходится меньше переделывать. Оно проверяет наличие у процесса разрешения на запись в каталог. Поскольку процесс будет производить запись в каталог в результате выполнения функции creat, наличие разрешения на запись в каталог означает, что процессам дозволяется создавать файлы в каталоге.




Содержание  Назад  Вперед