0
我有很多用Visual Studio 2005編譯的C++程序。它們大多是在控制檯窗口中運行的小型服務器模塊。無論如何,我遇到的問題是文本只能顯示在控制檯窗口或日誌文件中,但不能同時顯示。每個程序都有一個命令行選項來指定日誌文件。這裏是我調用stdout和stderr重定向到文件的函數。printf到控制檯窗口和文件?
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
有什麼辦法來設置的東西,所以輸出和錯誤被寫入都控制檯窗口,同時可選的日誌文件?我看過重定向cout或包裝函數的代碼,但是我們的print語句都使用printf,而且我更喜歡使用類似於consoleobj庫中的函數來儘可能地設置它。謝謝!
'dup2()'在Windows下工作嗎? – trojanfoe 2012-03-09 16:38:44