_fdopen, _wfdopen

将流相关联的低级别的 I/O 以前打开过的文件。

FILE *_fdopen(  
   int fd,
   const char *mode 
);
FILE *_wfdopen( 
   int fd,
   const wchar_t *mode 
);

参数

  • fd
    打开的文件的文件描述符。

  • mode
    文件访问的类型。

返回值

这些函数的每个指针返回到打开的流。 空指针值表示错误。 发生错误时,调用无效参数处理程序,如中所述参数验证。 如果允许执行继续, errno设置为任何一个EBADF,指示错误的文件描述符,或EINVAL,指示的mode是一个空指针。

有关这些和其他错误代码的详细信息,请参阅 _doserrno、 errno、 _sys_errlist 和 _sys_nerr

备注

_fdopen函数将与由标识文件关联的 I/O 流fd,从而可以为低级别的 I/O 缓冲,并设置格式打开文件。 _wfdopen宽字符版本的_fdopen。 mode参数_wfdopen是一个宽字符字符串。 _wfdopen和_fdopen否则的行为相同。

一般文本例程映射

Tchar.h 例程

_UNICODE 和未定义 _MBCS

定义 _MBCS

定义的 _UNICODE

_tfdopen

_fdopen

_fdopen

_wfdopen

mode字符的字符串,指定的文件和文件访问类型。

字符串mode指定的文件、 已请求的访问类型下, 表中所示。

  • "r"
    打开以进行读取。 如果该文件不存在或无法找到, fopen调用失败。

  • "w"
    将打开一个空的文件进行写入。 如果给定的文件存在,其内容被破坏。

  • "a"
    打开以进行写入,(附加) 的文件的末尾。 如果不存在,请创建该文件。

  • "r+"
    将打开并读取和写入。 (该文件必须存在。

  • "w+"
    将打开一个空文件,以便读取和写入。 如果给定的文件存在,其内容被破坏。

  • "a+"
    将打开并读取文件和追加。 如果不存在,请创建该文件。

当用打开文件时"a"或"a+"访问类型,所有写操作发生在该文件的末尾。 可以通过重新定位文件指针fseek或rewind,但它始终移回该文件的末尾之前任何写操作执行。 因此,不能覆盖现有数据。 当"r+", "w+",或"a+"指定访问类型,允许同时读取和写入 (该文件被认为是打开"更新")。 但是,在读取和写入之间切换时,必须插入了fflush, fsetpos, fseek,或rewind操作。 您可以指定当前位置的fsetpos或fseek操作时,如果您希望。

除了上述的值,下列字符也可包含在mode指定的换行字符的转换模式。

  • t
    在文本中的打开 (转换) 模式。 在此模式下,回车符返回换行符 (CR LF) 组合被转换成一行上输入订阅源 (LF) 和 LF 字符将被转换为输出上的 CR LF 组合。 此外,Ctrl + Z 解释为输入的文件的结束字符。 读取/写入,打开的文件中fopen检查 Ctrl + Z 文件的末尾,并会将其删除,如有可能。 这是因为使用fseek和ftell移动 Ctrl + Z 的结尾的文件中的函数可能会导致fseek到文件的末尾出现错误的行为。

  • b
    在二进制 (未翻译) 模式下打开。 从任何翻译t模式下则不会显示。

  • c
    启用提交标志相关联的filename ,以使文件缓冲区的内容直接写入磁盘,如果任一fflush或_flushall调用。

  • n
    重置提交标志相关联的filename为"无-提交"。这是默认值。 如果链接程序 Commode.obj,它还覆盖全局提交标志。 除非您显式链接 Commode.obj 程序,提交全局标志默认为"无约束"。

The t, c, and nmode options are Microsoft extensions for fopen and _fdopen. 如果您想要保留的可移植性 ANSI 不要使用它们。

如果t或b中没有给出mode,默认的转换模式定义的全局变量 _fmode。 如果t或b参数、 函数将失败并返回的前缀NULL。 文本和二进制模式的讨论,请参阅文本和二进制模式文件 I/O

有效的字符mode字符串中使用fopen和_fdopen与oflag中使用的参数 _open_sopen、,如下所示。

中字符的mode字符串

Equivalent oflagvalue for _open/_sopen

a

_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND)

a+

_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC)

w+

_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

n

要求

功能

所需的页眉

_fdopen

<stdio.h>

_wfdopen

<stdio.h> 或者 <wchar.h>

有关兼容性的详细信息,请参阅兼容性

示例

// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.


#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>

int main( void )
{
   FILE *stream;
   int  fd, count = 0;
   char inbuf[128];

   // Open a file.
   if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
      exit( 1 );

   // Get stream from file descriptor.
   if( (stream = _fdopen( fd, "r" )) == NULL )
      exit( 1 );

   while( fgets( inbuf, 128, stream ) != NULL )
      count++;

   // After _fdopen, close by using fclose, not _close.
   fclose( stream );
   printf( "Lines in file: %d\n", count );
}

输入: crt_fdopen.txt

Line one
Line two

dye30d82.collapse_all(zh-cn,VS.110).gifOutput

Lines in file: 2

.NET Framework 等效项

System::IO::FileStream::FileStream

请参见

参考

流I/O

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen