Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Открывает файл. Эти функции устарели, так как доступны более безопасные версии; see _sopen_s, _wsopen_s.
Синтаксис
int _open(
const char *filename,
int oflag [,
int pmode]
);
int _wopen(
const wchar_t *filename,
int oflag [,
int pmode]
);
Параметры
filename
Имя файла.
oflag
Разрешенные типы операций.
pmode
Режим разрешений.
Возвращаемое значение
Каждая из этих функций возвращает дескриптор файла для открытого файла. Возвращаемое значение -1 указывает на ошибку; в этом случае для errno задается одно из следующих значений.
Значение errno |
Condition |
|---|---|
EACCES |
Попытка открыть файл только для чтения для записи, режим общего доступа к файлам не разрешает указанные операции, или заданный путь является каталогом. |
EEXIST |
Указаны флаги _O_CREAT и _O_EXCL, однако filename уже существует. |
EINVAL |
Недопустимый аргумент oflag или pmode. |
EMFILE |
Больше нет доступных дескрипторов файлов (открыто слишком много файлов). |
ENOENT |
Файл или путь не найден. |
Дополнительные сведения об этих и других кодах возврата см. в разделе errno, _doserrnoи _sys_errlist_sys_nerr.
Замечания
Функция _open открывает файл, указанный параметром filename, и готовит его к чтению или записи, как задано параметром oflag.
_wopen — это версия _openс расширенными символами; аргумент filename для _wopen — строка расширенных символов. Поведение_wopen и _open идентично в противном случае.
Сопоставления подпрограмм универсального текста
<tchar.h> рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
|---|---|---|---|
_topen |
_open |
_open |
_wopen |
oflag — целочисленное выражение, сформированное из одной или нескольких из следующих констант манифеста или констант, определенных в <fcntl.h>.
константа oflag; |
Поведение |
|---|---|
_O_APPEND |
Перемещает указатель файла в конец файла перед каждой операцией записи. |
_O_BINARY |
Открывает файл в двоичном режиме (без преобразования). (См fopen . описание двоичного режима.) |
_O_CREAT |
Создает файл и открывает его для записи. Не действует, если существует файл, указанный параметром filename. Аргумент pmode обязателен, если указан флаг _O_CREAT. |
_O_CREAT | _O_SHORT_LIVED |
Создает файл как временный и, если это возможно, не сбрасывает на диск. Аргумент pmode обязателен, если указан флаг _O_CREAT. |
_O_CREAT | _O_TEMPORARY |
Создает файл в качестве временного файла; файл удаляется при закрытии последнего дескриптора файла. Аргумент pmode обязателен, если указан флаг _O_CREAT. Чтобы сохранить устаревшее поведение для совместимости приложений, другие процессы не препятствуют удалению этого файла. |
_O_CREAT | _O_EXCL |
Возвращает значение ошибки, если файл, указанный параметром filename, существует. Применяется только при использовании с _O_CREAT. |
_O_NOINHERIT |
Предотвращает создание общего дескриптора файла. |
_O_RANDOM |
Указывает, что кэширование оптимизировано для случайного доступа с диска, но не ограничивается им. |
_O_RDONLY |
Открывает файл только для чтения. Не удается указать или _O_RDWR_O_WRONLY. |
_O_RDWR |
Открывает файл для чтения и записи. Не удается указать или _O_RDONLY_O_WRONLY. |
_O_SEQUENTIAL |
Указывает, что кэширование оптимизировано для последовательного доступа с диска, но не ограничивается им. |
_O_TEXT |
Открывает файл в режиме перевода текста ANSI. Дополнительные сведения см. в разделе "Текстовый и двоичный режим" в файлах ввода-вывода и fopenввода-вывода. |
_O_TRUNC |
Открывает файл и обрезает его до нулевой длины; необходимо разрешение на запись в файл. Не удается указать с _O_RDONLYпомощью .
_O_TRUNC при использовании с _O_CREAT открывает существующий файл или создает новый.
Примечание. Флаг _O_TRUNC уничтожает содержимое указанного файла. |
_O_WRONLY |
Открывает файл только для записи. Не удается указать или _O_RDONLY_O_RDWR. |
_O_U16TEXT |
Открывает файл в режиме Юникода UTF-16. |
_O_U8TEXT |
Открывает файл в режиме Юникода UTF-8. |
_O_WTEXT |
Открывает файл в режиме Юникода. |
Чтобы указать режим доступа к файлу, необходимо задать _O_RDONLY, _O_RDWR или _O_WRONLY. Значение по умолчанию для режима доступа отсутствует.
Если для открытия файла для чтения используется флаг _O_WTEXT, _open считывает начало файла и проверяет наличие метки порядка байтов (BOM). Если есть BOM, файл рассматривается как UTF-8 или UTF-16LE в зависимости от BOM. Если метка порядка байтов есть, файл обрабатывается как ANSI. Если файл открыт для записи с помощью флага _O_WTEXT, используется кодировка UTF-16. Независимо от любых предыдущих параметров или метки порядка байтов, если используется флаг _O_U8TEXT, файл всегда открывается в кодировке UTF-8; если используется флаг _O_U16TEXT, файл всегда открывается в кодировке UTF-16.
Если файл открывается в режиме Юникода с помощью флагов _O_WTEXT, _O_U8TEXT или _O_U16TEXT, функции ввода преобразуют данные, считываемые из файла в данные UTF-16, хранимые с типом wchar_t. Затем функции, которые выполняют запись в файл, открытый в режиме Юникода, ожидают буферы, содержащие данные UTF-16, хранимые с типом wchar_t. Если файл закодирован как UTF-8, данные UTF-16 превратятся в UTF-8 при записи. Содержимое в кодировке UTF-8 преобразуется в UTF-16 при чтении. Попытка чтения или записи нечетного числа байт в режиме Юникода приводит к возникновению ошибки проверки параметра . Для чтения или записи данных, хранимых в программе в кодировке UTF-8, используйте режим текстового или двоичного файла вместо режима Юникода. Вы несете ответственность за любой необходимый перевод кодировки.
Если _open вызывается с флагами _O_WRONLY | _O_APPEND (режим добавления) и _O_WTEXT, _O_U16TEXT или _O_U8TEXT, сначала выполняется попытка открыть файл для чтения и записи, считывается метка порядка байтов, а затем файл снова открывается только для записи. Если происходит сбой открытия файла для чтения и записи, файл открывается только для записи и для параметра режима Юникода используется значение по умолчанию.
Если несколько констант манифеста используются для формирования аргумента oflag, константы объединяются с помощью битового оператора ИЛИ (|). Сведения о двоичном и текстовом режимах см. в разделе "Текстовый и двоичный режим" в файле ввода-вывода.
Аргумент pmode обязателен, только если указан флаг _O_CREAT. Если файл уже существует, pmode игнорируется. В противном случае аргумент pmode задает параметры разрешений файла, которые настраиваются при первом закрытии нового файла.
_open применяет текущую маску разрешений файла к pmode до настройки разрешений. Дополнительные сведения см. в разделе _umask.
pmode — целочисленное выражение, содержащее одну или обе из следующих констант манифеста, которые определены в <sys\stat.h>.
pmode |
Значение |
|---|---|
_S_IREAD |
Разрешено только чтение. |
_S_IWRITE |
Разрешена запись. (Если действует, разрешает чтение и запись.) |
_S_IREAD | _S_IWRITE |
Разрешены чтение и запись. |
При указании обеих констант они присоединяются к побитовой оператору OR ( | ). В Windows все файлы доступны для чтения; Разрешение только для записи недоступно. Поэтому режимы _S_IWRITE и _S_IREAD | _S_IWRITE эквивалентны.
Если значение, отличное от определенного _S_IREAD сочетания и _S_IWRITE указано pmodeдля (даже если оно указывает допустимое в другой операционной системе) или если указано любое другое значение, отличное от допустимых pmode значений, функция создает утверждение в режиме отладки и вызывает обработчик недопустимых oflag параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, функция возвращает -1 и устанавливает errno в значение EINVAL.
Требования
| Function | Обязательный заголовок | Необязательный заголовок |
|---|---|---|
_open |
<io.h> |
<fcntl.h>, , <sys\types.h><sys\stat.h> |
_wopen |
<io.h> или <wchar.h> |
<fcntl.h>, , <sys\types.h><sys\stat.h> |
_open и _wopen являются расширениями Майкрософт. Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Все версии библиотек времени выполнения языка C.
Пример
// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
* named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
* for output. The files are then closed.
*/
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
int main( void )
{
int fh1, fh2;
fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
// Note: _open is deprecated; consider using _sopen_s instead
if( fh1 == -1 )
perror( "Open failed on input file" );
else
{
printf( "Open succeeded on input file\n" );
_close( fh1 );
}
fh2 = _open( "CRT_OPEN.OUT",
_O_WRONLY | _O_CREAT,
_S_IREAD | _S_IWRITE ); // C4996
if( fh2 == -1 )
perror( "Open failed on output file" );
else
{
printf( "Open succeeded on output file\n" );
_close( fh2 );
}
}
Выходные данные
Open succeeded on input file
Open succeeded on output file
См. также
Низкоуровневый ввод-вывод
_chmod, _wchmod
_close
_creat, _wcreat
_dup, _dup2
fopen, _wfopen
_sopen, _wsopen