_sopen_s, _wsopen_s
Открывает файл для совместного использования.Это версии _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 устанавливается в одно из следующих значений.
EACCES
Заданный путь ведет к каталогу, или же файл доступен только для чтения, но была попытка операция открытия для записи.EEXIST
Флаги _O_CREAT и _O_EXCL были заданы, но filename уже существует.EINVAL
Недопустимый аргумент oflag, shflag илиpmode или pfh или filename был указателем null.EMFILE
Больше нет доступных идентификаторов файла.ENOENT
Не найден файл или путь.
Если недопустимый аргумент передается в функцию, то вызывается обработчик недопустимого параметра, как описано в Проверка параметров.Если выполнение может быть продолжено, errno установлено в EINVAL и возаращается EINVAL.
Дополнительные сведения об этих и других кодах возврата см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.
В случае ошибки возвращается -1 через pfh (если pfh не является указателем null).
Заметки
Функция _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
Открывает файл в бинарном режиме (untranslated).(См. 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.Для режима доступа значение по умолчанию отсутствует.
Если _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> |
Дополнительные сведения о совместимости см. в разделе Совместимость во введении.
Пример
См. пример для _locking.