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