私は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
ので、stdoutとstderrは両方コンソールウィンドウと同時に、オプションのログファイルに書き込まれます物事を設定する方法はありますか?私はcoutやラッパー関数をリダイレクトするコードを見たことがありますが、私たちのprintステートメントはすべてprintfを使用しています。可能であれば、私たちのconsoleobjライブラリに似た関数を使用したいと思います。ありがとう!
Windowsでは 'dup2()'は動作しますか? – trojanfoe