2

我之前一直在使用 freopen(来自 stdio.h)函数,而没有问自己这个问题。但现在我不确定。

例如,我重新打开了标准输出:

    #define  OUTPUT_FILE "out.txt"
    if ( freopen(OUTPUT_FILE,"w+",stdout) == NULL)
      printf("logout can't be opened\n");

通常每个进程都有并自动处理标准输出、标准错误、标准输入,我们不需要关心它们的关闭。
但是怎么会在这里?我已经重新打开了标准输出。
我应该调用 fclose 来关闭重新打开的标准输出吗?

PS 我更乐意查看执行此处理的部分代码,而不是听到我可以确信这里一切都很好。

在此先感谢您的任何提示。

4

1 回答 1

4

fclose(stdout);用于关闭重定向。

关闭文件句柄通常更干净。如果一个文件指针在程序退出时打开,它将为您关闭。

但是,如果您只是关闭指针,stdout 将不会再次重定向到终端。

freopen("re.txt", "w", stdout);
printf("this is redirected stdout");
fclose(stdout); 

printf("this not");

您可以使用以下命令再次将标准输出恢复到终端(并从命令行中断重定向):

freopen("/dev/tty", "a", stdout);

如果要撤消 freopen ( http://c-faq.com/stdio/undofreopen.html ),可以使用dup( example ) 恢复以前的指针或根本不使用 freopen 。

于 2013-02-11T19:50:02.973 回答