Windows でも同様の手法を使用できます。同じ概念に対して異なる単語を使用する必要があるだけです。:) この記事: http://msdn.microsoft.com/en-us/library/ms682499.aspxは win32 パイプを使用して別のプロセスからの I/O を処理します。同じプロセス内のスレッドで同じことを行うだけです。処理する。もちろん、あなたの場合、プロセスのどこからでも stderr へのすべての出力がコンシューマーにリダイレクトされます。
実際、必要なパズルのピースは_fdopenと_open_osfhandleです。実際、私が何年も前にリリースしたいくつかのコードからの関連する例を次に示します。
DWORD CALLBACK DoDebugThread(void *)
{
AllocConsole();
SetConsoleTitle("Copilot Debugger");
// The following is a really disgusting hack to make stdin and stdout attach
// to the newly created console using the MSVC++ libraries. I hope other
// operating systems don't need this kind of kludge.. :)
stdout->_file = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
stdin->_file = _open_osfhandle((long)GetStdHandle(STD_INPUT_HANDLE), _O_TEXT);
debug();
stdout->_file = -1;
stdin->_file = -1;
FreeConsole();
CPU_run();
return 0;
}
この場合、メイン プロセスは、stdio ハンドルでまったく開始されない GUI プロセスでした。コンソールを開き、適切なハンドルを stdout と stdin に押し込んで、debug() 関数 (stdio の対話型関数として設計されています) が新しく作成されたコンソールとやり取りできるようにします。いくつかのパイプを開いて、stderr をリダイレクトするために同じようなことを行うことができるはずです。