Fra*_*ank 25 c redirect stdout
在我的C程序中,我想暂时将STDOUT重定向到"/ dev/null"(例如).然后写入"/ dev/null"后我想恢复STDOUT.我该如何管理?
R..*_*R.. 51
在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 *).