int open (path, oflag [, mode]) char *path; int oflag, mode;
ОПИСАНИЕ
Аргумент path является указателем на маршрутное имя файла. Системный вызов open открывает дескриптор для указанного файла и устанавливает флаги статуса файла в соответствии со значением аргумента oflag. Для файлов, не являющихся псевдоустройствами [см. ], значение oflag задается как поразрядное ИЛИ флагов из следующего списка (из первых трех флагов можно установить только один):
O_RDONLY Открыть только на чтение. O_WRONLY Открыть только на запись. O_RDWR Открыть на чтение/запись. O_NDELAY Этот флаг может воздействовать на последующие операции чтения и записи [см. и ].
При открытии именованного канала с установленными флагами O_RDONLY или O_WRONLY:
Если установлен флаг O_NDELAY, то вызов open только на чтение завершается без задержки, а вызов open только для записи отрабатывает с сообщением об ошибке, если в данный момент нет процесса, открывшего файл для чтения;
Если не установлен флаг O_NDELAY, то вызов open только на чтение блокируется, пока какой-либо процесс не откроет файл для записи, а вызов open только на запись блокируется, пока какой либо процесс не откроет файл на чтение.
При открытии файла, ассоциированного с линией связи:
Если установлен флаг O_NDELAY, то вызов open завершается без ожидания несущей.
Если не установлен флаг O_NDELAY, то вызов open блокируется до появления несущей.
O_APPEND Перед каждой операцией записи устанавливать указатель текущей позиции на конец файла. O_SYNC При открытии обычного файла этот флаг воздействует на последующие операции записи. Если флаг установлен, то каждый вызов ожидает физического обновления как данных, так и статуса файла. O_CREAT Если файл существует, то флаг игнорируется. В противном случае идентификаторы владельца и группы создаваемого файла устанавливаются равными, соответственно, действующим идентификаторам пользователя и группы процесса, а младшие 12 бит значения режима доступа к файлу устанавливаются равными значению аргумента mode, модифицированному следующим образом [см. ]:
Биты, соответствующие единичным битам маски режима создания файлов текущего процесса [см. ], устанавливаются равными 0.
Бит навязчивости [см. ] устанавливается равным 0.
O_TRUNC Если файл существует, то он опустошается (размер становится равным 0), а режим доступа и владелец не изменяются. O_EXCL Если установлены оба флага O_EXCL и O_CREAT, то системный вызов open завершается неудачей, если файл уже существует.
При открытии псевдоустройства значение oflag может задаваться как поразрядное ИЛИ флага O_NDELAY с одним из флагов O_RDONLY, O_WRONLY или O_RDWR. Другие флаги применительно к псевдоустройствам игнорируются. Флаг O_NDELAY воздействует на работу драйверов псевдоустройств и некоторые системные вызовы[см. , , , ]. Что касается драйверов, то реализация флага O_NDELAY зависит от устройства.
Некоторые флаги могут быть установлены и после открытия файла, посредством системного вызова [см. также ].
Указатель текущей позиции устанавливается на начало файла.
Новый дескриптор файла остается открытым после выполнения системных вызовов [см. ].
Системный вызов open завершается неудачей и дескриптор указанного файла не открывается, если выполнено хотя бы одно из следующих условий:
[EACCES] Нет права на поиск для компонента маршрута. [EACCES] Для указанного файла нет прав на выполнение операций, задаваемых значением oflag. [EAGAIN] Файл существует и доступ к нему заблокирован [см. ]. [EEXIST] Флаги O_CREAT и O_EXCL установлены и указанный файл существует. [EFAULT] Аргумент path указывает за пределы отведенного процессу адресного пространства. [EINTR] Во время выполнения системного вызова перехвачен сигнал. [EIO] Разрыв связи или ошибка при открытии псевдоустройства. [EISDIR] Указанный файл является каталогом и открывается на запись или чтение/запись. [EMFILE] Превышается максимально допустимое количество дескрипторов файлов, открытых одновременно в одном процессе. [EMULTIHOP] Компоненты path требуют многократного обращения к удаленным компьютерам. [ENFILE] Переполнение системной таблицы файлов. [ENOENT] Флаг O_CREAT не установлен и указанный файл не существует. [ENOLINK] Маршрутное имя path указывает на удаленный компьютер, связи с которым в данный момент нет. [ENOMEM] Система не в состоянии выделить память под дескриптор пересылки. [ENOSPC] Установлены флаги O_CREAT и O_EXCL и нет свободных описателей файлов. [ENOSR] Нет места для потока. [ENOTDIR] Компонент маршрута не является каталогом. [ENXIO] Указанный файл является специальным символьным или блочным файлом, а устройство, ассоциированное с этим специальным файлом, не существует. [ENXIO] Установлены флаги O_NDELAY и O_WRONLY, указанный файл является именованным каналом и нет процесса, открывшего файл для чтения. [ENXIO] Неудачная попытка выполнить процедуру открытия для модуля или драйвера псевдоустройства. [EROFS] Указанный файл расположен в файловой системе, доступной только на чтение, а открывается на запись или чтение/запись. [ETXTBSY] Файл содержит секцию команд, которая в данный момент выполняется.
СМ. ТАКЖЕ
, , , , , , , , , , , , .
ДИАГНОСТИКА
При успешном завершении результатом служит дескриптор файла; в случае ошибки возвращается -1, а переменной errno присваивается код ошибки