如何在C程序中临时将stdout重定向到一个文件?

问题描述 投票:26回答:1

在我的C程序中,我想把STDOUT临时重定向到 "devnull"(例如)。写入 "devnull "后,我想恢复STDOUT。我如何管理这个问题?

c redirect stdout
1个回答
52
投票

在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 *).

© www.soinside.com 2019 - 2024. All rights reserved.