我怎么能临时将stdout重定向到C程序中的文件?

时间:2011-01-28 20:13:03

标签: c redirect stdout

在我的C程序中,我想暂时将STDOUT重定向到“/ dev / null”(例如)。然后 在写入“/ dev / null”之后,我想恢复STDOUT。我该如何管理?

1 个答案:

答案 0 :(得分:49)

在POSIX系统上,您可以按照以下方式执行此操作:

int bak, new;
fflush(stdout);
bak = dup(1);
new = open("/dev/null", O_WRONLY);
dup2(new, 1);
close(new);
/* your code here ... */
fflush(stdout);
dup2(bak, 1);
close(bak);

进一步的普遍性是不可能的。

使用freopen的任何解决方案都是错误的,因为它不允许您恢复原始stdout。分配给stdout的任何解决方案都是错误的,因为stdout不是左值(它是一个扩展为FILE *类型表达式的宏。)