Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Открывает файл для общего доступа. Эти версии и _sopenимеют улучшения безопасности, как описано в функциях _wsopen безопасности в CRT.
Синтаксис
errno_t _sopen_s(
int* pfh,
const char *filename,
int oflag,
int shflag,
int pmode
);
errno_t _wsopen_s(
int* pfh,
const wchar_t *filename,
int oflag,
int shflag,
int pmode
);
Параметры
pfh
Дескриптор файла или -1, если возникает ошибка.
filename
Имя файла.
oflag
Разрешенные типы операций.
shflag
Разрешенные типы общего доступа.
pmode
Настройка разрешений.
Возвращаемое значение
Ненулевое возвращаемое значение указывает на ошибку; в этом случае для errno задается одно из следующих значений.
Значение errno |
Condition |
|---|---|
EACCES |
Заданный путь является каталогом, или файл доступен только для чтения, однако была выполнена попытка операции открытия для записи. |
EEXIST |
Указаны флаги _O_CREAT и _O_EXCL, однако filename уже существует. |
EINVAL |
Недопустимый аргумент oflag, shflag или pmode, либо pfh или filename является пустым указателем. |
EMFILE |
Больше нет доступных дескрипторов файлов. |
ENOENT |
Файл или путь не найден. |
Если недопустимый аргумент передается функции, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение разрешено продолжать, errno задано EINVALзначение и EINVAL возвращается.
Дополнительные сведения об этих и других кодах возврата см. в разделе errno, _doserrnoи _sys_errlist_sys_nerr.
Если возникает ошибка, функция -1 возвращается через pfh (если pfh не является пустым указателем).
Замечания
Функция _sopen_s открывает файл, указанный параметром filename, и готовит его к общему доступу для чтения или записи, как задано параметрами oflag и shflag.
_wsopen_s — это версия _sopen_sс расширенными символами; аргумент filename для _wsopen_s — строка расширенных символов. Поведение_wsopen_s и _sopen_s идентично в противном случае.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить его, ознакомьтесь с глобальным состоянием в CRT.
Сопоставления подпрограмм универсального текста
Tchar.h рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
|---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
Целочисленное выражение oflag формируется путем объединения одной или нескольких констант манифеста, определенных в <fcntl.h>. Если две или более констант образуют аргумент oflag, они объединяются с побитовой оператором OR ( | ).
константа 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, _O_U8TEXT или _O_U16TEXT, функции ввода преобразуют данные, считываемые из файла в данные UTF-16, хранимые с типом wchar_t. Затем функции, которые выполняют запись в файл, открытый в режиме Юникода, ожидают буферы, содержащие данные UTF-16, хранимые с типом wchar_t. Если файл закодирован как UTF-8, данные UTF-16 превратятся в UTF-8 при записи. Содержимое в кодировке UTF-8 преобразуется в UTF-16 при чтении. Попытка чтения или записи нечетного числа байт в режиме Юникода приводит к возникновению ошибки проверки параметра . Для чтения или записи данных, хранимых в программе в кодировке UTF-8, используйте режим текстового или двоичного файла вместо режима Юникода. Вы несете ответственность за любой необходимый перевод кодировки.
Если _sopen_s вызывается с флагами _O_WRONLY | _O_APPEND (режим добавления) и _O_WTEXT, _O_U16TEXT или _O_U8TEXT, сначала выполняется попытка открыть файл для чтения и записи, считывается метка порядка байтов, а затем файл снова открывается только для записи. Если происходит сбой открытия файла для чтения и записи, файл открывается только для записи и для параметра режима Юникода используется значение по умолчанию.
Аргумент shflag — это константное выражение, состоящее из одной из следующих констант манифеста, определенных в <share.h>.
константа shflag; |
Поведение |
|---|---|
_SH_DENYRW |
Запрещает доступ на чтение и запись. |
_SH_DENYWR |
Запрещает доступ на запись. |
_SH_DENYRD |
Запрещает доступ на чтение. |
_SH_DENYNO |
Разрешает доступ на чтение и запись. |
Аргумент pmode всегда обязателен, в отличие от _sopen.
_O_CREATЕсли файл не существует, указывает параметры разрешений файла, pmode которые задаются при первом закрытии нового файла. В противном случае pmode игнорируется.
pmode представляет собой целочисленное выражение, содержащее одну или обе константы манифеста _S_IWRITE и _S_IREADопределенные в <sys\stat.h>. При указании обеих констант они объединяются с побитовой оператором OR. Значение параметра pmode следующее.
pmode |
Значение |
|---|---|
_S_IREAD |
Разрешено только чтение. |
_S_IWRITE |
Разрешена запись. (Если действует, разрешает чтение и запись.) |
_S_IREAD | _S_IWRITE |
Разрешены чтение и запись. |
Если разрешение на запись не задано, файл доступен только для чтения. В операционной системе Windows все файлы доступны для чтения; Невозможно предоставить разрешение только для записи. Поэтому режимы _S_IWRITE и _S_IREAD | _S_IWRITE эквивалентны.
_sopen_s применяет текущую маску разрешений файла к pmode до настройки разрешений. (См. раздел _umask.)
Требования
| Function | Обязательный заголовок | Необязательный заголовок |
|---|---|---|
_sopen_s |
<io.h> |
<fcntl.h>, , <sys\types.h><sys\stat.h><share.h> |
_wsopen_s |
<io.h> или <wchar.h> |
<fcntl.h>, , <sys/types.h><sys/stat.h><share.h> |
_sopen_s и _wsopen_s являются расширениями Майкрософт. Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
Пример см. в примере _locking.
См. также
Низкоуровневый ввод-вывод
_close
_creat, _wcreat
fopen, _wfopen
_fsopen, _wfsopen
_open, _wopen