How could I temporary redirect stdout to a file in a C program?
Within my C program, I’d like to temporarly redirect stdout to /dev/null
(for example). Then,
after writing to /dev/null
, I’d like to restore stdout. How do I manage this?
On POSIX systems, you can do it as follows:
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);
What you want is not possible in further generality.
Any solution using freopen
is wrong, as it does not allow you to restore the original stdout
. Any solution by assignment to stdout
is wrong, as stdout
is not an lvalue (it's a macro that expands to an expression of type FILE *
).