PHP中管道的非阻塞打开

Posted

技术标签:

【中文标题】PHP中管道的非阻塞打开【英文标题】:Non-blocking open of pipe in PHP 【发布时间】:2014-10-07 10:20:49 【问题描述】:

我必须从需要写入 fifo 的 php 脚本中打开一个命名的 fifo,但它可能并不总是在读取端打开。现在我使用fopen,但是当fifo的读取端没有打开时它总是阻塞。在 php 中是否有相当于 UNIX 的 int open(pname, O_WRONLY | O_NONBLOCK) 以便当 fifo 不打开时立即返回?

【问题讨论】:

【参考方案1】:

没有直接等效于您描述的 C 函数。但你可以使用:

fopen($pipename, "w+")

该操作将立即返回,因为它获得了对管道的读/写访问权限,因此将始终打开一个读句柄(打开普通写访问管道将阻止读者打开另一端)

注意:通常人们不想这样做。没有办法知道真正的管道阅读器是否真的收到了消息。这可能会导致数据丢失。

命名管道最适合于可以保证写入器和读取器并行运行的应用程序。

【讨论】:

以上是关于PHP中管道的非阻塞打开的主要内容,如果未能解决你的问题,请参考以下文章

未发出信号的非阻塞 ConnectNamedPipe 事件

Posix PIPE 上的非阻塞读取和阻塞写入

我可以在 Linux 上打开命名管道以在 Python 中进行非阻塞写入吗?

非阻塞命名管道

[linux] 详解linux进程间通信

[linux] 详解linux进程间通信