状況は、system()
またはからプログラムを開始したことCreateProcess()
です。
さて、そのプログラムがコンソールにデータを出力するので、何かをすることは可能ですか。つまり、プログラムがそれを出力するということです。これは、終了を待ってデータを収集してから処理するのではなく、この外部プログラムが印刷したいデータを使用してコンソールを呼び出した瞬間に、そのデータを取得して処理し、別のものを出力します。コンソール。
状況は、system()
またはからプログラムを開始したことCreateProcess()
です。
さて、そのプログラムがコンソールにデータを出力するので、何かをすることは可能ですか。つまり、プログラムがそれを出力するということです。これは、終了を待ってデータを収集してから処理するのではなく、この外部プログラムが印刷したいデータを使用してコンソールを呼び出した瞬間に、そのデータを取得して処理し、別のものを出力します。コンソール。
最も簡単な方法は、通常、プログラムを で開始すること_popen(your_program, "r");
です。それはあなたが読むことができる を返し、FILE *
それが読み取るものは、子がその標準出力に書き込むものです。そのファイルを読むEOF
と、子プロセスが終了したことを意味します。これにより、子からの出力をリアルタイムで読み取り、処理することが比較的簡単になります。
Linuxでは、名前付きパイプを作成します。
system("mkfifo pipename")
次に、最初のプログラムでパイプを開き、次のコマンドでプログラムを開始します。
system("program > pipename")
Windowsでこれを行う方法がわかりません。
子プロセスを作成する前に AllocConsole を呼び出すか、(親プロセスで) AttachConsole(ChildPID) 関数を使用します。その後、任意の ReadConsoleXXX または WriteConsoleXXX 関数を使用できます。