別のプロセスで popen() を実行するアプリケーションで作業しています。このプロセスの出力 (stderr と stderr の両方) を、アプリケーションによって作成された 2 つの名前付きパイプにリダイレクトする必要があります。次に、パイプからデータを読み取る必要があります。
mkfifo("output.fifo", 0666); // error checks etc.
mkfifo("error.fifo", 0666); // error checks etc.
popen("cstuff 'param' < input.txt 1> output.fifo 2> error.fifo", "r");
動作しません: error.fifoから読み取ろうとすると、アプリケーションがハングします。sleep()
ing / wait()
ing betweenmkfifo()
とpopen()
も機能しません。
// output.txt is the result from a file dialog
popen("cstuff 'param' < input.txt 1> output.txt 2> error.fifo", "r");
動作します。
popen("cstuff 'param' < input.txt 1> output.fifo", "r");
も機能します。
$ cstuff 'param' < input.txt 1> output.txt 2> output.txt
シェルからも機能します(ただし、私のアプリケーションからは機能しません)。
両方のパイプからの読み取りを機能させる簡単な (または任意の) 方法を見つけることができませんでした。それはどのように達成できますか?