【发布时间】:2014-10-07 10:20:49
【问题描述】:
我必须从需要写入 fifo 的 php 脚本中打开一个命名的 fifo,但它可能并不总是在读取端打开。现在我使用fopen,但是当fifo的读取端没有打开时它总是阻塞。在 php 中是否有相当于 UNIX 的 int open(pname, O_WRONLY | O_NONBLOCK) 以便当 fifo 不打开时立即返回?
【问题讨论】:
标签: php linux named-pipes
我必须从需要写入 fifo 的 php 脚本中打开一个命名的 fifo,但它可能并不总是在读取端打开。现在我使用fopen,但是当fifo的读取端没有打开时它总是阻塞。在 php 中是否有相当于 UNIX 的 int open(pname, O_WRONLY | O_NONBLOCK) 以便当 fifo 不打开时立即返回?
【问题讨论】:
标签: php linux named-pipes
没有直接等效于您描述的 C 函数。但你可以使用:
fopen($pipename, "w+")
该操作将立即返回,因为它获得了对管道的读/写访问权限,因此将始终打开一个读句柄(打开普通写访问管道将阻止读者打开另一端)
注意:通常人们不想这样做。没有办法知道真正的管道阅读器是否真的收到了消息。这可能会导致数据丢失。
命名管道最适合于可以保证写入器和读取器并行运行的应用程序。
【讨论】: