C modifying printf () to output to a file

c, linux, printf, unix

Solution

This is usually done with I/O-redirection (... >file).

Check this little program:

#include <stdio.h>
#include <unistd.h>

int main (int argc, char *argv[]) {
    if (isatty (fileno (stdout)))
        fprintf (stderr, "output goes to terminal\n");
    else
        fprintf (stderr, "output goes to file\n");

    return 0;
}

ottj@NBL3-AEY55:~ $ ./x
output goes to terminal
ottj@NBL3-AEY55:~ $ ./x >yy
output goes to file

Problem

Is there a way to modify the `printf` in order to output string on a file rather than to the console? I tried looking up something on the Internet and found calls like `dup`, `dup2` and `fflush` that might be associated with this. EDIT: Maybe I wasn't clear.. the thing is that this was in a C exam question.. the question is as follows: Explain how a program that normally output strings to screen (using `printf()`) can be made to output string to a file, without changing any code in the mentioned program.

Original source