【发布时间】:2010-12-28 19:51:14
【问题描述】:
我在玩mkstemp(),它提供了一个文件描述符,但我想通过fprintf() 生成格式化输出。有没有一种简单的方法可以将mkstemp() 提供的文件描述符转换为适合与fprintf() 一起使用的FILE * 结构?
【问题讨论】:
我在玩mkstemp(),它提供了一个文件描述符,但我想通过fprintf() 生成格式化输出。有没有一种简单的方法可以将mkstemp() 提供的文件描述符转换为适合与fprintf() 一起使用的FILE * 结构?
【问题讨论】:
使用fdopen():
FILE* fp = fdopen(fd, "w");
【讨论】:
fileno() : linux.die.net/man/3/fileno
fd 是用一些标志打开的(比如O_NONBLOCK) - 在fdopen 用新标志打开它之后会发生什么?他们会被xor-ed 在一起还是被替换?
fdopen 有什么不好吗? (假设它发生在某个被一次又一次调用的函数中)
FILE* f = fdopen(d, "w");
man fdopen 输出:
概要
#include <stdio.h>
FILE *
fdopen(int fildes, const char *mode);
fdopen()函数将流与现有文件描述符fildes相关联。流的模式必须与文件描述符的模式兼容。当流通过fclose(3)关闭时,fildes也将关闭。
【讨论】:
没有标准的方法来做到这一点(或相反),因为 C 标准对文件描述符没有任何规定。您的特定平台可能会也可能不会提供这种机制。
【讨论】:
mkstemp 意味着在这种特定情况下非标准解决方案是可以接受的。然而,在这种情况下,他应该添加posix 标签(我看到已经添加了)。