1

私の C++ プログラムでは、bash スクリプトを実行する必要があります。次に、C++ プログラムでスクリプトを実行して得られた結果を返す必要があります。私には2つの可能性があります:

1. use system(script.sh). In script.sh I redirect the output in a file which is processd after I return to the c++ program.
2. use popen

script.sh から返される出力が大きい (100 M) 可能性があることを考えると、この方法のどれが優先されるかに興味があります。ありがとう。

4

1 に答える 1

5

親プロセスを使用systemすると、子プロセスが終了するまでブロックされます。子プロセスはフル パフォーマンスで実行されます。

popen子プロセスを開始しますが、終了するまで待機しません。したがって、親プロセスは、子プロセスが実行されている間、やりたいことを続けることができます。たとえば、子プロセスの出力を読み取ることができます。親プロセスは、親プロセスが他に何をしなければならないかによって、子の出力パイプからブロッキングまたは非ブロッキングを読み取るかどうかを決定できます。子は並行して実行され、その出力をパイプに書き込みます。親プロセスがパイプから読み取っておらず、パイプのメモリ制限に達している場合、書き込み時にブロックされる可能性があります。したがって、親プロセスは出力を読み続ける必要があります。

アプローチはsystemもう少し単純です。ただしpopen、プロセスがまだ実行されている間にプロセスの出力を読み取る可能性があります。また、余分なファイル (スペース) は必要ありません。だから私は使用しますpopen

于 2013-11-14T08:51:38.557 に答える