4

Linuxでパイプを作成しましmkfifo /tmp/myFIFOた。chmodを777に設定しました。次に、パイプを読み取り、パイプに書き込んだものを出力するACアプリケーションがあります。

PHPでこのようにすると、これが機能します..

$command = "echo 'helloworld' > myFIFO";
$process = proc_open($command, $descriptor, $pipes, $cwd, $env);

しかし、私がfwriteでそれを行うとき、例えば

$out = fopen("/tmp/myFIFO","w");
fwrite($out,"hello");
fclose($out);

まったく機能しません。Linux でパイプから出力が得られないのはなぜですか?..fwrite が機能しないのはなぜですか?..ありがとう

4

2 に答える 2

3

皆様のご協力のおかげで、現在は機能しています。chmod を a+rw に設定しました。

chmod a+rw /tmp/myFIFO

今では正常に動作しています。

ご助力いただきありがとうございます。

于 2012-10-29T15:36:35.800 に答える
1

openFIFO には、 (システム コールを使用して直接、open(2)または などのラッパーを介してfopen(3))最初に書き込みを行うとopen、リーダーが同じ FIFO を読み取り用に開くまで呼び出しがブロックされるという奇妙な動作があります。両端が開くと、2 つの呼び出しのブロックが解除され、読み取りと書き込みを開始できます。

おそらく、どのリーダーも FIFO のもう一方の端をまだ開いていないfwriteため、呼び出しが返されないため、プログラムが呼び出しに到達していない (正常に機能するはずです) ことがわかります。fopen別のプログラムで読み取り用に FIFO を開いている場合は、動作するはずです。

于 2012-10-29T15:36:30.860 に答える