Windows では、CreatePipe と CreateProcess を使用してプロセスを起動し、stderr に書き込まれたテキストをキャプチャしたいと考えています。
ここの MSDN にサンプル コードがあります: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx
私の問題は、STDERR をリダイレクトしてキャプチャしたいが、STDIN と STDOUT をそのままにしておくことです。それらを子プロセスのコンソール ウィンドウにバインドしたままにします。(子プロセスがコンソール プロセスであり、ウィンドウ プロセスではない場合。)
サンプル コードに従って、STARTUPINFO.hStdError をパイプ ハンドルに設定し、STARTUPINFO.hStdOutput と STARTUPINFO.hStdInput を INVALID_HANDLE_VALUE に設定すると、子プロセスは INVALID_HANDLE_VALUE を stdin と stdout に設定します。すべての読み取りが失敗します。すべてのprintfはどこにも行きません。コンソールウィンドウは完全に空白です。
これは可能ですか?