CreateProcessを使用して別のプログラムを実行する場合、stdoutをキャプチャするための推奨方法は何ですか?つまり、2番目のプログラムがstdoutに印刷したものを取り出し、最初のプログラムが解析できる配列で終わらせますか?CreateProcessとキャプチャstdout
どちらのプログラムも、Cで書かれたまっすぐなWin32プログラムです。
CreateProcessを使用して別のプログラムを実行する場合、stdoutをキャプチャするための推奨方法は何ですか?つまり、2番目のプログラムがstdoutに印刷したものを取り出し、最初のプログラムが解析できる配列で終わらせますか?CreateProcessとキャプチャstdout
どちらのプログラムも、Cで書かれたまっすぐなWin32プログラムです。
短い答えは、それに応じてSTARTUPINFO
構造のhStdOut
/hStdErr
とdwFlag
メンバーを設定し、匿名のパイプを作成し、CreateProcess()
がパイプの書き込み側のハンドルを継承することです。あなたのパイプの書き込みハンドルを閉じることを忘れないでください。パイプの読み込みハンドルから、ERROR_BROKEN_PIPE
エラーで失敗するまでループ内で読むことができます。
MSDNは、このの詳細な例を提供します。
Creating a Child Process with Redirected Input and Output
あなたがこれを行うには、最初の人ではありません、そこのコード例の多くなるとStackOverflowの上ここに質問を複製する必要があります。