printf到控制台窗口和文件?

时间:2012-03-09 16:25:50

标签: c++ visual-studio-2005 io

我有许多使用Visual Studio 2005编译的C ++程序。它们大多是在控制台窗口中运行的小型服务器模块。无论如何,我遇到的问题是文本只能显示在控制台窗口或日志文件中,而不能同时显示在两者上。每个程序都有一个命令行选项来指定日志文件。这是我调用将stdout和stderr重定向到文件的函数。

void consoleobj::setstdouterr(const stringobj& printstr)
{
  #if !defined(_WIN32_WCE)
    freopen(printstr.c_str(),"w",stdout);
  #ifdef _MSC_VER 
    ::SetStdHandle(STD_ERROR_HANDLE,GetStdHandle(STD_OUTPUT_HANDLE));  
  #endif
  #endif
  // make log msgs flush to log file(cout does this(on \n?), printf doesn't)
  //now if both redir to same log file, msgs should be in right order
  setvbuf(stdout, NULL, _IONBF, 0);  //no buffering
  setvbuf(stderr, NULL, _IONBF, 0);  //no buffering
}//end method setstdouterr

有没有办法设置,所以stdout和stderr同时写入两个控制台窗口和一个可选的日志文件?我已经看到重定向cout或包装函数的代码,但我们的print语句都使用printf,我更喜欢使用类似于consoleobj库中的函数来设置它,如果可能的话。谢谢!

1 个答案:

答案 0 :(得分:1)

而不是在代码中实现此功能 您可以在Unix中使用众所周知的实用程序tee 它的Windows版本称为wtee.exe

C:\> programm | wtee log.txt