如何打开命名管道?

时间:2011-03-15 18:44:33

标签: php file-io named-pipes

  • Ubuntu 9.10 / CentOS 5.5
  • PHP 5.2.10-2ubuntu6.7 / 5.2.11

以下最小测试用例给出了这个输出:

  

string(3)“foo”

     

警告:第10行的/[...]/mkfifo.php中的资源ID#3的stat()[function.stat]:stat失败

     

布尔(假)

<?php

$pipe_name = 'foo';
if(!file_exists($pipe_name) && !posix_mkfifo($pipe_name, 0777)){
  echo 'foo';
  exit(1);
}
var_dump($pipe_name);
$pipe = fopen($pipe_name, 'r+');
var_dump(stat($pipe));

?>

当然我做错了什么?我使用了r +,因为根据http://php.net/manual/en/function.posix-mkfifo.php#89642它应该“适合我”,但正如你所看到的,我甚至没有机会去做非阻塞部分。我尚未尝试过的另类更详细的解决方案:http://php.net/manual/en/function.shell-exec.php#52826

1 个答案:

答案 0 :(得分:3)

我认为您的错误是由于使用stat()导致的。您为其提供了一个打开的文件资源,但它应仅与$filename一起使用。

您的管道已正确打开,如Resource id #3

所示

使用stat($pipe_name)获取有关fifo的信息。
或者stream_get_meta_data($pipe)表示已打开的文件句柄。