_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.

См. также

Ссылки

ВВОДА-ВЫВОДА низкого уровня

_close

_create, _wcreat

fopen, _wfopen

_fsopen, _wfsopen

_open, _wopen