OPEN(2) OPEN(2)
НАЗВАНИЕ
open - открыть файл для чтения или записи
СИНТАКСИС
#include
int open (path, oflag [, mode])
char *path;
int oflag, mode;
ОПИСАНИЕ
Аргумент path является указателем на маршрутное имя
файла. Системный вызов open открывает дескриптор для
указанного файла и устанавливает флаги статуса файла в
соответствии со значением аргумента oflag. Для файлов,
не являющихся псевдоустройствами [см. intro(2)], значе-
ние oflag задается как поразрядное ИЛИ флагов из следу-
ющего списка (из первых трех флагов можно установить
только один):
O_RDONLY
Открыть только на чтение.
O_WRONLY
Открыть только на запись.
O_RDWR
Открыть на чтение/запись.
O_NDELAY
Этот флаг может воздействовать на последующие опе-
рации чтения и записи [см. read(2) и write(2)].
При открытии именованного канала с установленными
флагами O_RDONLY или O_WRONLY:
1. Если установлен флаг O_NDELAY, то вызов open
только на чтение завершается без задержки, а
вызов open только для записи отрабатывает с со-
общением об ошибке, если в данный момент нет
процесса, открывшего файл для чтения;
2. Если не установлен флаг O_NDELAY, то вызов open
только на чтение блокируется, пока какой-либо
процесс не откроет файл для записи, а вызов
open только на запись блокируется, пока какой
либо процесс не откроет файл на чтение.
При открытии файла, ассоциированного с линией свя-
зи:
1. Если установлен флаг O_NDELAY, то вызов open
завершается без ожидания несущей.
2. Если не установлен флаг O_NDELAY, то вызов open
блокируется до появления несущей.
O_APPEND
Перед каждой операцией записи устанавливать указа-
тель текущей позиции на конец файла.
O_SYNC
При открытии обычного файла этот флаг воздействует
на последующие операции записи. Если флаг установ-
лен, то каждый вызов write(2) ожидает физического
обновления как данных, так и статуса файла.
O_CREAT
Если файл существует, то флаг игнорируется. В про-
тивном случае идентификаторы владельца и группы
создаваемого файла устанавливаются равными, соот-
ветственно, действующим идентификаторам пользова-
теля и группы процесса, а младшие 12 бит значения
режима доступа к файлу устанавливаются равными
значению аргумента mode, модифицированному следую-
щим образом [см. creat(2)]:
1. Биты, соответствующие единичным битам маски ре-
жима создания файлов текущего процесса [см.
umask(2)], устанавливаются равными 0.
2. Бит навязчивости [см. chmod(2)] устанавливается
равным 0.
O_TRUNC
Если файл существует, то он опустошается (размер
становится равным 0), а режим доступа и владелец
не изменяются.
O_EXCL
Если установлены оба флага O_EXCL и O_CREAT, то
системный вызов open завершается неудачей, если
файл уже существует.
При открытии псевдоустройства значение oflag может за-
даваться как поразрядное ИЛИ флага O_NDELAY с одним из
флагов O_RDONLY, O_WRONLY или O_RDWR. Другие флаги при-
менительно к псевдоустройствам игнорируются. Флаг
O_NDELAY воздействует на работу драйверов псевдоуст-
ройств и некоторые системные вызовы [см. getmsg(2),
putmsg(2), read(2), write(2)]. Что касается драйверов,
то реализация флага O_NDELAY зависит от устройства.
Некоторые флаги могут быть установлены и после открытия
файла, посредством системного вызова fcntl(2) [см. так-
же fcntl(5)].
Указатель текущей позиции устанавливается на начало
файла.
Новый дескриптор файла остается открытым после выполне-
ния системных вызовов exec(2) [см. fcntl(2)].
Системный вызов open завершается неудачей и дескриптор
указанного файла не открывается, если выполнено хотя бы
одно из следующих условий:
[EACCES] Нет права на поиск для компонента маршрута.
[EACCES] Для указанного файла нет прав на выполнение
операций, задаваемых значением oflag.
[EAGAIN] Файл существует и доступ к нему заблокиро-
ван [см. chmod(2)].
[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] Файл содержит секцию команд, которая в дан-
ный момент выполняется.
СМ. ТАКЖЕ
chmod(2), close(2), creat(2), dup(2), fcntl(2),
intro(2), lseek(2), read(2), getmsg(2), putmsg(2),
umask(2), write(2), fcntl(5).
ДИАГНОСТИКА
При успешном завершении результатом служит дескриптор
файла; в случае ошибки возвращается -1, а переменной
errno присваивается код ошибки.
|