Программирование на C и C++

Онлайн справочник программиста на C и C++

open, _rtl_open

int open(const char *filename, int access, unsigned mode)

int _rtl_open(const char *filename, int access)

Прототип: 
Описание: 

Функция ореn() является частью UNIX-подобной системы ввода/вывода и не определена в стан­дарте ANSI С.

В отличие от буферизированной системы ввода/вывода в UNIX-подобной системе предпочте­ние отдается использованию дескрипторов файлов типа int, а не указателей на FILE. Функция ореn() открывает файл с именем filename и устанавливает режим доступа к нему в соответствии со значением аргумента access. Аргумент access представляет собой комбинацию основного режима доступа и модификаторов.

Base Значение
O_RDONLY Открыть только для чтения
O_WRONLY Открыть только для записи
O_RDWR Открыть для чтения/записи

Выбрав одно из этих значений, можно объединить его, используя ИЛИ, с одним или большим количеством следующих модификаторов доступа:

Модификаторы доступа Значение
O_NDELAY Не используется; включен для совместимости с UNIX
O_APPEND Заставляет указатель файла переместиться в конец файла перед каждой операцией записи
O_CREAT Если файл не существует, создает его с атрибутами, установленными в соответствии со значением mode
O_TRUNC Если файл существует, урезает его до длины 0, но сохраняет атрибуты файла
O_EXCL При использовании с O_CREAT не будет создавать выходной файл, если файл с таким именем уже существует
O_BINARY Открывает двоичный файл
O_ТЕХТ Открывает текстовый файл

 Аргумент mode требуется только при использовании модификатора O_CREAT. В этом случае mode может принимать одно из трех значений:

Mode Значение
S_IWRITE Доступ по записи
S_IREAD Доступ по чтению
S_IWRITE | S_IREAD Доступ по чтению/записи

 В случае успеха ореn() возвращает положительное целое число, являющееся дескриптором откры­того файла. Возврат —1 означает, что файл не может быть открыт. В этом случае errno устанавли­вается в одно из следующих значений:

ENOENT Файл не существует
EMFILE Слишком много открытых файлов
EACCESS Доступ запрещен
EINVACC Недействительный код доступа

Функция _rtl_open() имеет большее количество модификаторов режима доступа при работе под управлением Windows. Возможны следующие добавочные значения:

Access modifiers Значение
O_NOINHERIT Файл не передается программе-потомку
SH_COMPAT Допускаются другие операции, использующие SH_COMPAT
SH_DENYRW Только текущий дескриптор файла имеет доступ к файлу
SH_DENYWR Разрешен доступ к файлу только по чтению
SH_DENYRD Разрешен доступ к файлу только по записи
SH_DENYNO Разрешены и другие опции совместного использования, за исключением SH_COMPAT

 

Пример: