How could I temporary redirect stdout to a file in a C program?

20,034

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 *).

Share:
20,034
Frank
Author by

Frank

Updated on July 09, 2022

Comments

  • Frank
    Frank almost 2 years

    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?