怎样恢复一个重定向了的标准流?
如果要将重定向了的标准流恢复到初始状态,可以使用标准C库函数dup()和fdopen()。
dup()函数可以复制一个文件句柄,你可以用dup()函数保存对应于stdout标准流的文件句柄。fdopen()函数可以打开一个已用dup()函数复制了的流。这样,你就可以重定向并恢复标准流,请看下例:
#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");
}
dup()函数可以复制一个文件句柄,你可以用dup()函数保存对应于stdout标准流的文件句柄。fdopen()函数可以打开一个已用dup()函数复制了的流。这样,你就可以重定向并恢复标准流,请看下例:
#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");
}