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 |