В этом разделе описаны действия, которые выполняет операционная система при создании, открытии и закрытии файлов.
Для создания файлов различных
типов предусмотрены разные функции:
Функция | Тип создаваемого файла |
---|---|
creat | Обычный |
open | Обычный (если установлен флаг O_CREAT) |
mknod | Обычный, FIFO или специальный |
mkfifo | Именованный канал (FIFO) |
pipe | Неименованный канал |
socket | Сокеты |
mkdir | Каталоги |
symlink | Символьная связь |
Функция creat создает файл с указанными именем и режимом доступа. Если файл с таким Именем уже существует, и у процесса есть права на запись в него, то функция creat усекает файл. В результате освобождаются все блоки данных, а размер файла обнуляется. Обычный файл можно создать и с помощью функции open с флагом O_CREAT.
Функции creat, mkfifo и mknod создают файлы с правами доступа, заданными в параметре Режим. При создании обычного файла с помощью функции open права доступа задаются в параметре Режим флага O_CREAT. Функция umask устанавливает маску прав доступа, предоставляемых при создании файлов, и позволяет получить предыдущее значение маски.
Права доступа к новому файлу вычисляются путем побитового умножения величины, обратной umask, на права доступа, указанные процессом при создании файла. Во время создания файла процессом операционная система выполняет следующие действия:
Для создания специальных файлов применяются функции mknod и mkfifo. Функция mknod позволяет создать именованный канал (FIFO), обычный файл или файл устройства. Она создает такой же i-узел, как и функция creat. При создании файла с помощью функции mknod тип этого файла указывается в соответствующем параметре. При создании блочного или символьного файла устройства в i-узел записывается информация о главном и дополнительном устройствах.
Функция mkfifo служит интерфейсом для функции mknod и применяется для создания именованных каналов.
Для обращения к ранее созданному файлу применяется функция open. Она возвращает дескриптор файла. Этот дескриптор применяется функциями чтения, записи, поиска, копирования, установки параметров ввода-вывода, определения состояния файла и закрытия файла. При выделении дескриптора файла функция open создает запись в таблице дескрипторов файлов.
Функция open выполняет следующие действия:
Функции ioctl и ioctlx предназначены для управления специальными файлами устройств.
Для удаления записи о ненужном файле из таблицы дескрипторов файлов применяется функция close. Если в таблице дескрипторов существует несколько ссылок на файл, то значение счетчика уменьшается на 1. Если существует только одна ссылка на файл, то запись таблицы освобождается. Обращение к файлу, дескриптор которого освобожден, приведет к ошибке, если только его дескриптор не был повторно связан с файлом с помощью функции open. При завершении процесса ядро закрывает все дескрипторы файлов, открытые и не освобожденные процессом. Это гарантирует, что к моменту завершения процесса все файлы будут закрыты.
Глава 5, Файловые системы и каталоги
Функции chdir, chroot, close, fcntl, dup, dup2, ioctl, ioctlx, link, open, openx, create, mknod, mkfifo, readlink, remove, symlink, umask, unlink