The dup() function duplicates a file handle. You can use the dup() function to save the file handle corresponding to the stdout standard stream. The fdopen() function opens a stream that has been duplicated with the dup() function. Thus, as shown in the following example, you can redirect standard streams and restore them:
#include <stdio.h>
void main(void);
void main(void)
{
int orig_stdout;
/* Duplicate the stdout file handle and store it in orig_stdout. */
orig_stdout = dup(fileno(stdout));
/* This text appears on-screen. */
printf(“Writing to original stdout...\n”);
/* Reopen stdout and redirect it to the “redir.txt” file. */
freopen(“redir.txt”, “w”, stdout);
/* This text appears in the “redir.txt” file. */
printf(“Writing to redirected stdout...\n”);
/* Close the redirected stdout. */
fclose(stdout);
/* Restore the original stdout and print to the screen again. */
fdopen(orig_stdout, “w”);
printf(“I’m back writing to the original stdout.\n”);
}
Can stdout be forced to print somewhere other than the screen?
Although the stdout standard stream defaults to the screen, you can force it to print to another device using
something called redirection. For instance, consider the following program:
/* redir.c */
#include <stdio.h>
void main(void);
void main(void)
{
printf(“Let’s get redirected!\n”);
}
At the DOS prompt, instead of entering just the executable name, follow it with the redirection character >, and thus redirect what normally would appear on-screen to some other device. The following example would redirect the program’s output to the prn device, usually the printer attached on LPT1:
C:>REDIR > PRN
Alternatively, you might want to redirect the program’s output to a file, as the following example shows:
C:>REDIR > REDIR.OUT
In this example, all output that would have normally appeared on-screen will be written to the file REDIR.OUT.
No comments:
Post a Comment