1

我正在使用我的共享库将 freopen 用于 GUI 应用程序,这样我就可以将调试消息从标准输出重定向到文件

我一直在使用基于 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;
}

这重定向stdoutmyfile.txt并最终关闭stdout

有没有办法重定向到一个文件,然后有效地删除重定向,stdout然后像往常一样打印到屏幕而不是用 关闭它fclose

4

3 回答 3

3

不,不是纯C。如果你可以假设一个特定的系统(例如POSIX),可能有一些选项。

但坦率地说,freopenIMO 是不是一个 hack,只需要与预先编写的代码兼容。如果您正在编写新代码,则应该将 传递FILE *给相关函数并使用fprintf而不是printf.

于 2012-06-27T14:40:56.240 回答
2

我以前没有这样做过,但是尝试使用 dup 在 freopen 之前创建一个新的文件描述符,它是 stdout 的副本,然后使用 dup2 将该新描述符的属性复制回 stdout。

http://linux.die.net/man/2/dup2

这是假设您的系统甚至有 dup。让我知道它是否有效!

于 2012-06-27T15:10:31.380 回答
1

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

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

取自这里:http: //support.microsoft.com/kb/58667

于 2014-06-03T20:13:05.443 回答