我在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不工作?..谢谢
答案 0 :(得分:3)
现在感谢您的帮助。我将chmod设置为+ rw。
chmod a+rw /tmp/myFIFO
现在它工作正常。
感谢您的帮助。
答案 1 :(得分:1)
FIFO有一种奇怪的行为,当你第一次open
写入时(直接使用open(2)
系统调用或通过任何包装器,如fopen(3)
),{{1}调用块直到读者也打开相同的FIFO进行读取。当两端都打开时,两个呼叫都被解锁,并且可以开始读写。
您可能看到的是,您的程序永远不会进入open
调用(应该正常运行),因为fwrite
调用永远不会返回,因为没有读者打开另一端还没有。如果你有另一个程序打开FIFO进行读取,它应该可以工作。