Как я могу временно перенаправить стандартный вывод в файл в программе на C? - PullRequest
25 голосов
/ 28 января 2011

В моей программе на C я бы хотел временно перенаправить STDOUT в "/ dev / null" (например). затем после записи в "/ dev / null" я хотел бы восстановить STDOUT. Как мне это сделать?

1 Ответ

49 голосов
/ 28 января 2011

В системах 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 не является lvalue (это макрос, который расширяется до выражения типа FILE *).

...