我怎么能临时将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 *
类型的表达式的宏)。