Открыть файл
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open( const char *path,int oflag,... );int open64( const char *path,int oflag,... );
O_CREAT
в oflag необходимо также задать значение для данного аргумента. В качестве значения необходимо задать объект типа mode_t
, в котором указан режим доступа, используемый при создании файла. Для дополнительной информации смотрите struct stat.libc
Функции open() и open64() открывают файл, расположенный в path, создают файловое описание, ссылающееся на файл, и файловый дескриптор, ссылающийся на файловое описание. Флаги статуса и режима доступа к открываемому файловому дескриптору устанавливаются в зависимости от значения аргумента oflag.
Созданный файловый дескриптор является новым и, следовательно, не используется совместно с каким-либо другим процессом в системе.
Значение аргумента oflag задаётся с помощью побитового ИЛИ из значений ниже, определённых в заголовочном файле <fcntl.h>
. Необходимо обязательно передать аргументом oflag один из первых трёх флагов режимов доступа:
Вы также можете указать любую комбинацию нижеприведённых флагов в значении аргумента oflag:
mode_t
. Если файл существует, флаг не действует, за исключением комбинации, когда добавлен флаг O_EXCL
, как указано ниже. <sys/stat.h>
, добавляются в значение аргумента mode, за исключением флагов, предназначенных для создания файлового режима процесса (для дополнительной информации смотрите umask()). Флаги, установленные mode, не являющиеся флагами разрешений для файла (т.е. флаги типа файла) игнорируются. Аргумент mode не оказывает влияния на открытие файла для чтения, записи, чтения-записи. O_EXCL
и O_CREAT
open() завершается ошибкой в случае, если файл существует. Проверка существования файла и создание файла - атомарные операции, другой процесс, пытающийся выполнить данную операцию с таким же путём к файлу получит ошибку. Установка флага O_EXCL
без O_CREAT
не оказывает влияния на работу функции. 64-битные
значения смещения внутри файла. O_RDONLY
или O_WRONLY:
O_NONBLOCK
установлен: O_NONBLOCK
не установлен: O_NONBLOCK
установлен: O_NONBLOCK
не установлен: O_NONBLOCK
не указано. O_DSYNC
и O_SYNC
. O_DSYNC
выше. O_WRONLY
или O_RDWR
, длина файла будет уменьшена до нуля, режим и владелец сохранятся. O_TRUNC
не влияет на FIFO-файл, блочное устройство, символьное устройство и директории. Использование O_TRUNC
совместно с O_RDONLY
не имеет эффекта. Наибольшее значение, которое может быть корректно представлено как объект типа off_t
, должно быть установлено в качестве максимального смещения в описании открытого файла.
Неотрицательное целочисленное значение, представляющее собой неиспользуемый файловый дескриптор с наименьшим номером. В файле с возможностью поиска смещение устанавливается в начало файла.
Если возникла ошибка, функция возвращает -1
, а код ошибки записывается в errno.
В ЗОСРВ «Нейтрино» возвращаемый файловый дескриптор совпадает с идентификатором соединения (или coid) использующимся специфичными функциями Нейтрино. |
O_CREAT
и O_EXCL
установлены, при этом указанный файл существует. O_SYNC
, O_DSYNC
, O_RSYNC
) не поддерживается. PATH_MAX
или часть пути к файлу длиннее, чем NAME_MAX
. O_CREAT
не установлен, а указанного в path файла не существует; флаг O_CREAT
установлен, но часть префикса аргумента path не существует; аргумент path указывает на пустую строку. O_NONBLOCK
установлен, файл по указанному пути является FIFO-файлом, флаг O_WRONLY
установлен, не найден процесс, открывший этот же файл для чтения, либо устройство, ассоциированное с файлом, было удалено (например CD, floppy). off_t
. O_WRONLY
, O_RDWR
, O_CREAT
(если файла не существует), O_TRUNC
. #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>int main( void ){int fd;/* open a file for output *//* replace existing file if it exists *//* with read/write perms for owner */fd = open( "myfile.dat", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR );/* read a file that is assumed to exist */fd = open( "myfile.dat", O_RDONLY );/* append to the end of an existing file *//* write a new file if file doesn't exist *//* with full read/write permissions */fd = open( "myfile.dat", O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR |S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH );return (EXIT_SUCCESS);}
open() — POSIX 1003.1; open64() — Поддержка больших файлов
Функция open() включает расширения POSIX 1003.1-1996 и ЗОСРВ «Нейтрино».
chmod(), close(), creat(), dup(), dup2(), errno, fcntl(), fstat(), lseek(), read(), write()
Предыдущий раздел: Описание API системной библиотеки