Share via


_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,
);

参数

  • [out] pfh
    文件句柄或 -1 后错误。

  • [in] filename
    文件名。

  • [in] oflag
    允许操作的类型。

  • [in] shflag
    允许的共享的类型。

  • [in] 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

一旦错误, (除非 pfh 是 null 指针), -1 到 pfh 将返回。

备注

_sopen_s 函数打开 filename 指定的文件和文件进行共享读取或写入准备,所定义的 oflag 和 shflag。 _wsopen_s 是 _sopen_s的宽字符版本;为 _wsopen_s 的 filename 参数是宽字符字符串。 _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 指定的文件存在,则返回 false。 应用,仅当使用 _O_CREAT。

  • _O_NOINHERIT
    防止一个共享文件描述符的创建。

  • _O_RANDOM
    指定母随机访问从磁盘。

  • _O_RDONLY
    打开只读的文件;不能指定与 _O_RDWR 或 _O_WRONLY。

  • _O_RDWR
    打开读取和写入的文件;不能指定与 _O_RDONLY 或 _O_WRONLY。

  • _O_SEQUENTIAL
    指定母顺序访问从磁盘。

  • _O_TEXT
    在文本 (转换) 模式打开的文件。 (有关更多信息,请参见 文本和二进制架构文件 I/Ofopen。)

  • _O_TRUNC
    打开文件并截断它为零长度;文件必须具有写入权限。 不能指定与 _O_RDONLY的此标志。 _O_TRUNC使用了 _O_CREAT打开现有文件或创建一个新文件。

    备注

    _O_TRUNC 标志销毁中指定的文件的内容。

  • _O_WRONLY
    打开只编写的文件;不能指定与 _O_RDONLY 或 _O_RDWR。

  • _O_U16TEXT
    打开文件在 Unicode UTF-16 模式。

  • _O_U8TEXT
    打开文件在 Unicode UTF-8 模式。

  • _O_WTEXT
    打开文件在 Unicode 模式。

若要指定文件访问方法,您必须指定 _O_RDONLY、 _O_RDWR或 _O_WRONLY。 没有访问模式的默认值。

如果 _sopen_s 调用与 _O_WRONLY|_O_APPEND (累加) 和 _O_WTEXT_O_U16TEXT_O_U8TEXT,它首先尝试打开读取的文件,并编写,请阅读 BOM,然后重新打开它只编写的。 如果打开读取和写入的文件失败,它将打开只编写的文件并对 Unicode 模式设置为使用默认值。

参数 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参见示例。

请参见

参考

底层I/O

_close

_creat, _wcreat

fopen, _wfopen

_fsopen, _wfsopen

_open, _wopen