使用std :: freopen重定向stderr c ++

时间:2012-10-28 04:56:29

标签: c++ io

我想将所有stderr重定向到一个文件,我的记录器也会在应用程序(游戏)运行的整个过程中使用该文件。

以下内容将其重定向到控制台,但它永远不会出现在我的文件中,并且在游戏循环结束后使用fclose实际上并没有做任何事情,通常应该这样做。

freopen(Logger::logFile.c_str(),"a",stderr);

如何在游戏循环中将stderr输出到文本文件,那么任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

我们可能会玩未定义的行为... 因为您不能使用freopen将各种内容重定向到同一个文件。

在下面的示例中,根据您关闭的文件,您将以不同的方式书写:

#include <stdio.h>

int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("                              This sentence is redirected to a file.");
//  fclose (stdout);
  freopen ("myfile.txt","w",stderr);
  fprintf (stderr, "This ERRORis redirected to a file.");
  //fclose (stderr);
  fclose (stdout);
  return 0;
}

在这里你在句子之前写错误

This ERRORis redirected to a file.sentence is redirected to a file.

不太好。我建议您让操作系统为您执行重定向到同一文件工作,例如在Unix / Linux中:

./myprog.sh 2>&1