freopen用于在指向文件后将输出重定向回stdout

时间:2012-06-27 14:15:54

标签: c

我正在使用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关闭它?

3 个答案:

答案 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)

这会将stdout返回到显示(默认标准输出):

freopen( "CON", "w", stdout );

取自此处:http://support.microsoft.com/kb/58667