Поделиться через


_sopen, _wsopen

Открывает файл для общего доступа. Существуют более безопасные версии этих функций; см. раздел _sopen_s, _wsopen_s.

int _sopen(    const char *filename,    int oflag,    int shflag [,    int pmode ]  ); int _wsopen(    const wchar_t *filename,    int oflag,    int shflag [,    int pmode ]  );

Параметры

  • filename
    Имя файла.

  • oflag
    Разрешенные типы операций.

  • shflag
    Разрешенные типы общего доступа.

  • pmode
    Настройка разрешений.

Возвращаемое значение

Каждая из этих функций возвращает дескриптор файла для открытого файла.

Если параметр filename или oflag является указателем NULL, или если параметр oflag или shflag не находится в пределах допустимого диапазона значений, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если разрешается продолжать выполнение, эти функции возвращают -1 и задают для errno одно из следующих значений.

  • EACCES
    Заданный путь является каталогом, или файл доступен только для чтения, однако была выполнена попытка операции открытия для записи.

  • EEXIST
    Указаны флаги _O_CREAT и _O_EXCL, однако filename уже существует.

  • EINVAL
    Недопустимый аргумент oflag или shflag.

  • EMFILE
    Больше нет доступных дескрипторов файлов.

  • ENOENT
    Файл или путь не найден.

Дополнительные сведения об этих и других кодах возврата см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.

Заметки

Функция _sopen открывает файл, указанный параметром filename, и готовит его к общему доступу для чтения или записи, как задано параметрами oflag и shflag. _wsopen — это версия _sopen с расширенными символами; аргумент filename для _wsopen — строка расширенных символов. Поведение _wsopen и _sopen идентично в противном случае.

Универсальное текстовое сопоставление функций

Процедура Tchar.h

_UNICODE и _MBCS не определены

_MBCS определено

_UNICODE определено

_tsopen

_sopen

_sopen

_wsopen

Целочисленное выражение 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
    Открывает файл в текстовом режиме (с преобразованием). (Дополнительные сведения см. в разделах Ввод и вывод файлов в текстовом и двоичном режиме и 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 вызывается с флагами _O_WRONLY | _O_APPEND (режим добавления) и _O_WTEXT, _O_U16TEXT или _O_U8TEXT, сначала выполняется попытка открыть файл для чтения и записи, считывается метка порядка байтов, а затем файл снова открывается только для записи. Если происходит сбой открытия файла для чтения и записи, файл открывается только для записи и для параметра режима Юникода используется значение по умолчанию.

Аргумент shflag — это константное выражение, которое состоит из одной из следующих констант манифеста, определенных в <share.h>.

  • _SH_DENYRW
    Запрещает доступ на чтение и запись.

  • _SH_DENYWR
    Запрещает доступ на запись.

  • _SH_DENYRD
    Запрещает доступ на чтение.

  • _SH_DENYNO
    Разрешает доступ на чтение и запись.

Аргумент pmode обязателен, только если указан флаг _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 применяет текущую маску разрешений файла к pmode до настройки разрешений. (См. _umask.)

Требования

Подпрограмма

Обязательный заголовок

Необязательный заголовок

_sopen

<io.h>

<fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>

_wsopen

<io.h> или <wchar.h>

<fcntl.h>, <sys\types.h>, <sys\stat.h>, <share.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

См. пример для _locking.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Для получения дополнительной информации см. Примеры вызовов неуправляемого кода.

См. также

Ссылки

Низкоуровневый ввод-вывод

_close

_creat, _wcreat

fopen, _wfopen

_fsopen, _wfsopen

_open, _wopen