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

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

在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 *类型的表达式的宏)。