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

FIFO 有一个奇怪的行为,当您首先open将它们写入时(直接使用open(2)系统调用或通过任何包装器,例如fopen(3)),open调用会阻塞,直到读取器也打开相同的 FIFO 进行读取。当两端都打开时,两个调用都被解除阻塞,可以开始读写了。

您可能看到的是您的程序永远不会进行fwrite调用(应该正常运行),因为fopen调用永远不会返回,因为还没有读取器打开 FIFO 的另一端。如果您有另一个程序打开 FIFO 进行读取,它应该可以工作。

于 2012-10-29T15:36:30.860 回答