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?
Redirecting stdout and stderr to a file: The I/O streams can be redirected by putting the n> operator in use, where n is the file descriptor number. For redirecting stdout, we use “1>” and for stderr, “2>” is added as an operator.
The regular output is sent to Standard Out (STDOUT) and the error messages are sent to Standard Error (STDERR). When you redirect console output using the > symbol, you are only redirecting STDOUT. In order to redirect STDERR, you have to specify 2> for the redirection symbol.
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 *
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With