如何从文件描述符中获取FILE指针?

BD *_*ill 79 c posix mkstemp

我正在玩mkstemp(),它提供了一个文件描述符,但我想通过fprintf()生成格式化的输出.有没有一种简单的方法可以将mkstemp()提供的文件描述符转换为适合与fprintf()一起使用的FILE*结构?

Ric*_*ton 95

用途fdopen():

FILE* fp = fdopen(fd, "w");
Run Code Online (Sandbox Code Playgroud)

  • 要从FILE*获取文件描述符,请使用`fileno()`:http://linux.die.net/man/3/fileno (32认同)
  • @jww:文件描述符不是ANSI C开头. (5认同)
  • 如果 `fd` 是用一些标志打开的(比如 `O_NONBLOCK`)——在 `fdopen` 用新的标志打开它之后它们会发生什么?它们会被“异或”在一起还是被替换? (2认同)
  • 多次调用`fdopen` 有什么不好的吗?(假设它发生在某个被一次又一次调用的函数中) (2认同)
  • @xealits FILE*的选项必须在已打开的文件描述符的范围内.因此,如果您使用只读打开fd,而只使用只写的FILE*,则应该抛出异常.有关详细信息,请参阅https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxbd00/rtfdo.htm (2认同)

Gre*_*osz 27

FILE* f = fdopen(d, "w");

man fdopen输出:

概要

#include <stdio.h>

FILE *
fdopen(int fildes, const char *mode);
Run Code Online (Sandbox Code Playgroud)

fdopen()函数将流与现有文件描述符相关联fildes.流的模式必须与文件描述符的模式兼容.当流关闭时fclose(3),fildes也关闭.