Подтвердить что ты не робот

Как можно временно перенаправить stdout в файл в программе на C?

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

4b9b3361

Ответ 1

В системах 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 *).