[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Что же делает вызов open(2) ?

Открытие существующего файла означает, что:
.  файл ищется в иерархии директорий для получения inode-номера.
.  проверяются права доступа файла
.  в таблице дескрипторов размещается новый дескриптор.
.  проверяются  системные   структуры  файлов   и,  если   необходимо,
   размещается новое поле.
.  если необходимо, размещается новая структура информации о файле.
.  соединяется с подходящим драйвером устройства.
.    возвращается файловый дескриптор (индекс в таблице файловых
дескрипторов).
Информация об открытых файлах хранится в ядре системы UNIX. Таблица
файловых дескрипторов, размещенная в пользовательской области
процесса, содержит указатели на системные структуры файлов. Файловый
дескриптор, значение, возвращаемое open(2), находится в диапазоне от 0
до SFNOLIM-1 и является индексом в таблице файловых дескрипторов.
Системные файловые структуры содержат информацию о конкретном вызове
open(2). Для каждого вызова open(2) выделяется собственная структура.
В структуре содержится следующая информация:
.  текущее   позиция    в   файле.   Это   положение   изменяется   на
   прочитанное/записанное количество байт. Кроме того, позицию в файле
   можно установить явно вызовом lseek(2).
.  копия флагов  открытия.  Эти  флаги  передаются  вторым  аргументом
   open(2).
.  счетчик ссылок.  Это число различных файловых дескрипторов из одной
   или  различных   пользовательских   областей,   которые   совместно
   используют данную системную структуру.
.    указатель на структуру информации о файле.
Структура информации о файле имеет следующее строение:
.    inode-номер и номер устройства.
.    пользовательский идентификатор и идентификатор группы владельца
файла.
.    счетчик ссылок - количество системных файловых структур,
ссылающихся на данную структуру.
.    связи - количество записей в директориях, указывающих на данный
файл.
.    тип файла - обычный, директория и пр.
.    права доступа данного файла.
.    размер файла в байтах.
.    список номеров блоков для блоков данных на диске.