我正在使用freopen作为使用我的共享库的GUI应用程序,这样我就可以将调试消息从stdout重定向到文件
我一直在使用基于C ++参考站点的代码段的代码:
/* freopen example: redirecting stdout */
#include <stdio.h>
int main ()
{
freopen ("myfile.txt","w",stdout);
printf ("This sentence is redirected to a file.");
fclose (stdout);
return 0;
}
这会将stdout
重定向到myfile.txt
,最后关闭stdout
有没有办法重定向到文件然后有效地删除重定向,以便stdout
像往常一样打印到屏幕而不是用fclose
关闭它?
答案 0 :(得分:2)
不,不是纯粹的C.如果你可以假设一个特定的系统(例如POSIX),可能有选择。
但坦率地说,freopen
是IMO的一个黑客,只需要与预先编写的代码兼容。如果您要编写新代码,则应将FILE *
传递给相关函数,并使用fprintf
代替printf
。
答案 1 :(得分:2)
我之前没有这样做过,但是尝试使用dup创建一个新文件描述符,它是freopen之前的stdout副本,然后使用dup2将该新描述符的属性复制回stdout。
http://linux.die.net/man/2/dup2
这假设你的系统甚至有重复。让我知道它是否有效!
答案 2 :(得分:1)