C freopen描述符 - 手动关闭/保持打开状态

时间:2013-02-11 19:40:29

标签: c file-descriptor stdio

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

E.g。我重新打开了stdout:

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

通常每个进程都自动处理stdout,stderr,stdin,我们不需要关心它们的关闭。
但它是如何在这里进行的?我重新打开了stdout 我应该调用fclose来关闭重新打开的stdout吗?

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

提前致谢,任何提示。

1 个答案:

答案 0 :(得分:1)

fclose(stdout);可以关闭重定向。

关闭文件句柄通常更干净。 如果在程序退出时打开了文件指针, 它会为你关闭。

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

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

printf("this not");

您可以使用以下命令将stdout恢复到终端(并从命令行中断重定向):

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

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

相关问题