我之前一直在使用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
我很高兴看到执行此处理的部分代码,而不是听到我可以确信这里的一切都很好。
提前致谢,任何提示。
答案 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),可以使用dup
(http://c-faq.com/stdio/undofreopen.html)恢复上一个指针或根本不使用freopen。