_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
Output
Lines in file: 2
.NET Framework 等效项
System::IO::FileStream::FileStream