_open, _wopen

打开文件。,因为更安全版本可用,这些功能已否决; _sopen_s, _wsopen_s参见。

int _open(
   const char *filename,
   int oflag [,
   int pmode] 
);
int _wopen(
   const wchar_t *filename,
   int oflag [,
   int pmode] 
);

参数

  • filename
    文件名。

  • oflag
    允许操作的类型。

  • pmode
    权限模式。

返回值

这些函数都返回一个已打开的文件的一个文件描述符。,在 errno 设置为下列值之一情况下,返回值 -1 指示错误。

  • EACCES
    尝试打开编写的,文件共享模式只读文件不允许指定了操作,或特定路径为内容。

  • EEXIST
    _O_CREAT 与指定的 _O_EXCL 标志,但是, filename 已存在。

  • EINVAL
    无效 oflag 或 pmode 参数。

  • EMFILE
    不可用的文件描述符 (许多打开文件)。

  • ENOENT
    未找到文件或路径。

有关这些属性和其他的更多信息返回代码示例,请参见 _doserrno、 errno、 _sys_errlist 和 _sys_nerr

备注

_open 函数打开 filename 指定的文件和文件进行读取或写入准备,如指定由 oflag。_wopen_open的宽字符版本;为 _wopen 的 filename 参数是宽字符字符串。_wopen_open 否则具有相同的行为。

一般文本例程映射

Tchar.h 实例

未定义的 _UNICODE 和 _MBCS

定义的 _MBCS

定义的 _UNICODE

_topen

_open

_open

_wopen

oflag 是从在 Fcntl.h 或常数的组合定义的一个或多个窗体的整数表达式以下清单常数。

  • _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 指定的文件存在,则返回 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。没有访问模式的默认值。

如果 _O_WTEXT 用于打开读取的文件, _open 读取的文件的字节顺序标记的开头和检查 (BOM)。如果有 BOM,文件被视为 UTF-8 或 UTF-16LE 基于 BOM。如果 BOM 不存在,将该文件作为 ANSI。使用 _O_WTEXT时,文件进行写入,使用 UTF-16。如果使用 _O_UTF8 ,文件始终中打开为 UTF-8,并且,如果使用 _O_UTF16 无论所有先前的设置或字节顺序标记,文件,始终中打开为 UTF-16。

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

当两个或多个清单常数可用于构成 oflag 参数时,常量合并使用按位或运算符 (|).有关二进制文件和文本模式的讨论,请参见 文本和二进制架构文件 I/O

pmode 参数,仅当 _O_CREAT 指定时,需要。如果该文件已经存在, pmode 被忽略。否则, pmode 指定文件权限集,设置,则新文件第一次时已关闭。_open 应用当前文件授权掩码。 pmode 在设置权限之前 (有关更多信息,请参见 _umask)。pmode 是整数表达式包含一个或两个以下清单常数,定义在 SYS \Stat .h。

  • _S_IREAD
    只允许读取。

  • _S_IWRITE
    允许的文本 (有效允许读取和写入)。

  • _S_IREAD | _S_IWRITE
    允许读取和写入。

当给定时对两个常数,这些连接与按位 " 或 " 运算符 (|).在 windows NT,所有文件都可读的,因此,只读权限不可用;因此模式 _S_IWRITE_S_IREAD | _S_IWRITE 等效。

如果除了上面以外的值为 pmode 指定 (即使在其他操作系统将指定有效的 pmode ) 或除了允许的 oflag 值以外的任何值指定,函数生成断言调试模式并调用无效参数处理程序 参数验证如中所述。如果执行允许继续,该函数返回 -1 并将 errnoEINVAL

要求

实例

必需的头

可选标头

_open

io.h

fcntl.h, sys/types.h, sys/stat.h

_wopen

io.h 或 wchar.h

fcntl.h, sys/types.h, sys/stat.h

有关更多兼容性信息,请参见中介绍的 兼容性

C 运行库的所有版本。

示例

// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
 * named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
 * for output. The files are then closed.
 */
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>

int main( void )
{
   int fh1, fh2;

   fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
   // Note: _open is deprecated; consider using _sopen_s instead
   if( fh1 == -1 )
      perror( "Open failed on input file" );
   else
   {
      printf( "Open succeeded on input file\n" );
      _close( fh1 );
   }

   fh2 = _open( "CRT_OPEN.OUT", _O_WRONLY | _O_CREAT, _S_IREAD | 
                            _S_IWRITE ); // C4996
   if( fh2 == -1 )
      perror( "Open failed on output file" );
   else
   {
      printf( "Open succeeded on output file\n" );
      _close( fh2 );
   }
}

Output

Open succeeded on input file
Open succeeded on output file

.NET Framework 等效项

请参见

参考

底层I/O

_chmod, _wchmod

_close

_creat, _wcreat

_dup, _dup2

fopen, _wfopen

_sopen, _wsopen