在我的C程序中,我想暂时将STDOUT重定向到“/ dev / null”(例如)。然后 在写入“/ dev / null”之后,我想恢复STDOUT。我该如何管理?
答案 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 *
类型表达式的宏。)