在我的C程序中,我想把STDOUT临时重定向到 "devnull"(例如)。写入 "devnull "后,我想恢复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
不是一个l值(它是一个宏,扩展为一个类型为 FILE *
).