Как я могу открыть именованную трубу? - PullRequest
0 голосов
/ 15 марта 2011
  • Ubuntu 9.10 / CentOS 5.5
  • PHP 5.2.10-2ubuntu6.7 / 5.2.11

Следующий минимальный тестовый пример дает такой вывод:

string (3) "foo"

Предупреждение: stat () [function.stat]: сбой stat для идентификатора ресурса # 3 в /[...]/mkfifo.php в строке 10

bool (false)

<?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 Ответ

3 голосов
/ 15 марта 2011

Я думаю, что ваша ошибка вызвана только использованием stat(). Вы предоставляете ему открытый файловый ресурс, но он должен использоваться только с $filename.

Ваша труба была правильно открыта, о чем свидетельствует Resource id #3

Используйте stat($pipe_name) для получения информации о fifo.
Или stream_get_meta_data($pipe) для дескриптора открытого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...