Unix Man (Справочное руководство)

         

OPEN(2)


OPEN(2)

НАЗВАНИЕ


open - открыть файл для чтения или записи

СИНТАКСИС

#include <fcntl.h>

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:

  1. Если установлен флаг O_NDELAY, то вызов open только на чтение завершается без задержки, а вызов open только для записи отрабатывает с сообщением об ошибке, если в данный момент нет процесса, открывшего файл для чтения;
  2. Если не установлен флаг O_NDELAY, то вызов open только на чтение блокируется, пока какой-либо процесс не откроет файл для записи, а вызов open только на запись блокируется, пока какой либо процесс не откроет файл на чтение.

При открытии файла, ассоциированного с линией связи:

  1. Если установлен флаг O_NDELAY, то вызов open завершается без ожидания несущей.
  2. Если не установлен флаг O_NDELAY, то вызов open блокируется до появления несущей.

O_APPEND Перед каждой операцией записи устанавливать указатель текущей позиции на конец файла. O_SYNC При открытии обычного файла этот флаг воздействует на последующие операции записи. Если флаг установлен, то каждый вызов ожидает физического обновления как данных, так и статуса файла. O_CREAT Если файл существует, то флаг игнорируется. В противном случае идентификаторы владельца и группы создаваемого файла устанавливаются равными, соответственно, действующим идентификаторам пользователя и группы процесса, а младшие 12 бит значения режима доступа к файлу устанавливаются равными значению аргумента mode, модифицированному следующим образом [см. ]:


  1. Биты, соответствующие единичным битам маски режима создания файлов текущего процесса [см. ], устанавливаются равными 0.
  2. Бит навязчивости [см. ] устанавливается равным 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 присваивается код ошибки


Содержание раздела