_sopen_s, _wsopen_s
Открывает файл для общего доступа. Эти версии _sopen and _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 задается одно из следующих значений.
EACCES
Заданный путь является каталогом, или файл доступен только для чтения, однако была выполнена попытка операции открытия для записи.EEXIST
Указаны флаги _O_CREAT и _O_EXCL, однако filename уже существует.EINVAL
Недопустимый аргумент oflag, shflag или pmode, либо pfh или filename является пустым указателем.EMFILE
Больше нет доступных дескрипторов файлов.ENOENT
Файл или путь не найден.
Если в функцию передается недопустимый аргумент, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, для errno задается значение EINVAL и возвращается значение EINVAL.
Дополнительные сведения об этих и других кодах возврата см. в разделе errno, _doserrno, _sys_errlist, and _sys_nerr.
В случае ошибки возвращается значение -1 через параметр pfh (если pfh не является нулевым указателем).
Заметки
Функция _sopen_s открывает файл, указанный параметром filename, и готовит его к общему доступу для чтения или записи, как задано параметрами oflag и shflag. _wsopen_s — это версия _sopen_s с расширенными символами; аргумент filename для _wsopen_s — строка расширенных символов. Поведение _wsopen_s и _sopen_s идентично в противном случае.
Универсальное текстовое сопоставление функций
Процедура Tchar.h |
_UNICODE и _MBCS не определены |
_MBCS определено |
_UNICODE определено |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
Целочисленное выражение oflag формируется из сочетания одной или более констант манифеста, которые определены в <fcntl.h>. Когда несколько констант манифеста формируют аргумент oflag, они объединяются с помощью битового оператора ИЛИ ( |).
_O_APPEND
Перемещает указатель файла в конец файла перед каждой операцией записи._O_BINARY
Открывает файл в двоичном режиме (без преобразования). (Описание двоичного режима см. в разделе fopen.)_O_CREAT
Создает файл и открывает его для записи. Не действует, если существует файл, указанный параметром filename._O_CREAT | _O_SHORT_LIVED
Создает файл в качестве временного файла и, по возможности, не сбрасывает его на диск._O_CREAT | _O_TEMPORARY
Создает файл в качестве временного файла; файл удаляется при закрытии последнего дескриптора файла._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
Открывает файл в текстовом режиме (с преобразованием). (Дополнительные сведения см. в разделах Ввод и вывод файлов в текстовом и двоичном режиме и 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>.
_SH_DENYRW
Запрещает доступ на чтение и запись._SH_DENYWR
Запрещает доступ на запись._SH_DENYRD
Запрещает доступ на чтение._SH_DENYNO
Разрешает доступ на чтение и запись.
Аргумент pmode всегда обязателен, в отличие от _sopen. При указании _O_CREAT, если файл не существует, pmode задает параметры разрешений файла, которые настраиваются при закрытии нового файла в первый раз. В противном случае pmode игнорируется. pmode — это целочисленное выражение, которое содержит одну или обе константы манифеста, _S_IWRITE и _S_IREAD, которые определены в <sys\stat.h>. Если заданы обе константы, они объединяются с помощью битового оператора ИЛИ. Значение параметра pmode следующее.
_S_IWRITE
Разрешена запись._S_IREAD
Разрешено чтение._S_IREAD | _S_IWRITE
Разрешены чтение и запись.
Если разрешение на запись не предоставлено, файл остается доступным только для чтения. В операционной системе Windows все файлы доступны для чтения; невозможно предоставить разрешение только на запись. Поэтому режимы _S_IWRITE и _S_IREAD | _S_IWRITE эквивалентны.
_sopen_s применяет текущую маску разрешений файла к pmode до настройки разрешений. (См. _umask.)
Требования
Подпрограмма |
Обязательный заголовок |
Необязательный заголовок |
---|---|---|
_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.