У меня есть много программ на C ++, которые компилируются с Visual Studio 2005. В основном это небольшие серверные модули, работающие в консольных окнах. В любом случае, проблема, с которой я сталкиваюсь, заключается в том, что текст может отображаться только в окне консоли или в файле журнала, но не в обоих случаях. Каждая программа имеет опцию командной строки для указания файла журнала. Вот функция, которую я вызываю для перенаправления 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, чтобы установить это, если это возможно. Спасибо!