使用php写入linux中的管道

时间:2012-10-29 15:23:42

标签: php c linux named-pipes

我在linux mkfifo /tmp/myFIFO创建了一个管道,现在我已经将chmod设置为777 ..然后我有一个c应用程序读取管道并输出我写入管道的内容。

当我在php中这样做时,这可以工作..

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

但是当我用fwrite这样做时

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

根本不起作用。我没有从我的管道输出任何输出?..为什么那个fwrite不工作?..谢谢

2 个答案:

答案 0 :(得分:3)

现在感谢您的帮助。我将chmod设置为+ rw。

chmod a+rw /tmp/myFIFO

现在它工作正常。

感谢您的帮助。

答案 1 :(得分:1)

FIFO有一种奇怪的行为,当你第一次open写入时(直接使用open(2)系统调用或通过任何包装器,如fopen(3)),{{1}调用块直到读者也打开相同的FIFO进行读取。当两端都打开时,两个呼叫都被解锁,并且可以开始读写。

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