2011-03-15 83 views
0
  • Ubuntu的9.10/5.5的CentOS
  • PHP 5.2.10-2ubuntu6.7/5.2.11

以下最小測試用例給出這個輸出:如何打開命名管道?

串(3)「富「

警告:STAT()[function.stat]:STAT在/[...]/mkfifo.php失敗資源ID#3在第10行

布爾(假)

<?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

回答

3

我認爲你的錯誤是由於使用stat()造成的。您給它一個打開的文件資源,但它只能與$filename一起使用。

你管通過Resource id #3

使用stat($pipe_name)證明,以獲取有關信息的fifo被正確打開。
stream_get_meta_data($pipe)用於打開的文件句柄。

+0

** facepalm **我沒有檢查*全部*文檔。謝謝。 :) – Grault 2011-03-15 19:09:06