The design of the UNIX Operating System 89 страница



 

Системные вызовы, работающие с символическим именем файла

 

Системные вызовы, связывающие pathname с дескриптором файла

 

Это функции создания и открытия файла. Например, в ОС Unix

 

fd = creat(pathname,modes);

 

fd = open(pathname,flags,modes);

 

Другие операции над файлами, такие как чтение, запись, позиционирование головок чтения- записи , вос-произведение дескриптора файла, установка параметров ввода-вывода, определение статуса файла и за-крытие файла, используют значение полученного дескриптора файла.

 

Рассмотрим работу системного вызова open.

 

Логическая файловая подсистема просматривает файловую систему в поисках файла по его имени. Она проверяет права на открытие файла и выделяет открываемому файлу запись в таблице файлов. Запись таблицы файлов содержит указатель на индексный узел открытого файла. Ядро выделяет запись в личной (закрытой) таблице в адресном пространстве процесса, выделенном процессу (таблица эта называется таблицей пользовательских дескрипторов открытых файлов) и запоминает указатель на данную запись. В роли указателя выступает дескриптор файла, возвращаемый пользователю. Запись в таблице пользова-тельских файлов указывает на запись в глобальной таблице файлов (см. рис. 12.13).

 

Первые три пользовательских дескриптора (0, 1 и 2) именуются дескрипторами файлов стандартного ввода, стандартного вывода и стандартного файла ошибок. Процессы в системе Unix по договоренности используют дескриптор файла стандартного ввода при чтении вводимой информации , дескриптор файла стандартного вывода при записи выводимой информации и дескриптор стандартного файла ошибок для записи сообщений об ошибках.


Основы операционных систем 126

 

Рис. 12.13. Структуры данных после открытия файлов

 

Связывание файла

 

Системная функция link связывает файл с новым именем в структуре каталогов файловой системы, соз-давая для существующего индекса новую запись в каталоге. Синтаксис вызова функции link:

 

link(source file name, target file name);

 

где source file name - существующее имя файла , а target file name - новое (дополнительное) имя, присваи-ваемое файлу после выполнения функции link.

 

Сначала ОС определяет местонахождение индекса исходного файла и увеличивает значение счетчика связей в индексном узле. Затем ядро ищет файл с новым именем; если он существует, функция link за - вершается неудачно, и ядро восстанавливает прежнее значение счетчика связей, измененное ранее. В противном случае ядро находит в родительском каталоге свободную запись для файла с новым именем, записывает в нее новое имя и номер индекса исходного файла.

 

Удаление файла

 

В Unix системная функция unlink удаляет из каталога точку входа для файла. Синтаксис вызова функции unlink:

 

unlink(pathname);

 

Если удаляемое имя является последней связью файла с каким -либо каталогом, ядро в итоге освобождает все информационные блоки файла. Однако если у файла было несколько связей, он остается все еще дос-тупным под другими именами.

 

Для того чтобы забрать дисковые блоки, ядро в цикле просматривает таблицу содержимого индексного узла, освобождая все блоки прямой адресации немедленно . Что касается блоков косвенной адресации, то ядро освобождает все блоки, появляющиеся на различных уровнях косвенности, рекурсивно, причем в первую очередь освобождаются блоки с меньшим уровнем.

 

Системные вызовы, работающие с файловым дескриптором


Основы операционных систем 127

Открытый файл может использоваться для чтения и записи последовательностей байтов. Для этого под-держиваются два системных вызова read и write, работающие с файловым дескриптором (или handle в терминологии Microsoft), полученным при ранее выполненных системных вызовах open или creat.


Дата добавления: 2021-01-21; просмотров: 132; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!