_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
указателем или shflag
oflag
не находится в допустимом диапазоне значений, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если разрешается продолжать выполнение, эти функции возвращают -1 и задают для errno
одно из следующих значений.
Значение errno |
Condition |
---|---|
EACCES |
Заданный путь является каталогом, или файл доступен только для чтения, однако была выполнена попытка операции открытия для записи. |
EEXIST |
Указаны флаги _O_CREAT и _O_EXCL , однако filename уже существует. |
EINVAL |
Недопустимый аргумент oflag или shflag . |
EMFILE |
Больше нет доступных дескрипторов файлов. |
ENOENT |
Файл или путь не найден. |
Дополнительные сведения об этих и других кодах возврата см. в разделе errno
, _doserrno
и _sys_nerr
_sys_errlist
.
Замечания
Функция _sopen
открывает файл, указанный параметром filename
, и готовит его к общему доступу для чтения или записи, как задано параметрами oflag
и shflag
. _wsopen
— это версия _sopen
с расширенными символами; аргумент filename
для _wsopen
— строка расширенных символов. Поведение_wsopen
и _sopen
идентично в противном случае.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить его, ознакомьтесь с глобальным состоянием в CRT.
Сопоставления подпрограмм универсального текста
Tchar.h рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tsopen |
_sopen |
_sopen |
_wsopen |
Целочисленное выражение 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
вызывается с флагами _O_WRONLY
| _O_APPEND
(режим добавления) и _O_WTEXT
, _O_U16TEXT
или _O_U8TEXT
, сначала выполняется попытка открыть файл для чтения и записи, считывается метка порядка байтов, а затем файл снова открывается только для записи. Если происходит сбой открытия файла для чтения и записи, файл открывается только для записи и для параметра режима Юникода используется значение по умолчанию.
Аргумент shflag
— это константное выражение, состоящее из одной из следующих констант манифеста, определенных в <share.h>
.
константа shflag ; |
Поведение |
---|---|
_SH_DENYRW |
Запрещает доступ на чтение и запись. |
_SH_DENYWR |
Запрещает доступ на запись. |
_SH_DENYRD |
Запрещает доступ на чтение. |
_SH_DENYNO |
Разрешает доступ на чтение и запись. |
Аргумент pmode
обязателен, только если указан флаг _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
применяет текущую маску разрешений файла к pmode
до настройки разрешений. Дополнительные сведения см. в разделе _umask
.
Требования
Function | Обязательный заголовок | Необязательный заголовок |
---|---|---|
_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
.
См. также
Низкоуровневый ввод-вывод
_close
_creat
, _wcreat
fopen
, _wfopen
_fsopen
, _wfsopen
_open
, _wopen