为什么我不能多次打开命名管道


Why can't I open a named pipe more than once?

我似乎无法从PHP多次打开Windows命名管道:

$pipe1 = fopen($pipeName, 'r+');  // (1)
fclose($pipe1);
$pipe2 = fopen($pipeName, 'r+');  // (2)
fclose($pipe2);

(1)成功,我可以写入管道或打开其上的阻塞读取。

(2) 失败

fopen(''''.''pipe''encoding):无法打开流:参数无效

"无效参数"似乎指的是模式,但我尝试了 (1) 和 (2) 之间的所有不同模式组合,没有区别。 无论是在同一进程中还是在另一个进程中,它都会失败。

我正在使用以下内容创建管道:

CreateNamedPipe("''''.''pipe''encoding", 3, 0, 5, 512, 512, 0, 0);

其中"3"表示为读/写管道,"5"是可以创建的最大实例数。 我也尝试了CreateNamedPipe的不同参数组合,但无济于事。

关于 Windows 命名管道,我缺少什么特别的东西吗?

"服务器进程必须调用 DisconnectNamedPipe 以断开管道句柄与其以前的客户端的连接,然后才能使用 ConnectNamedPipe 函数将该句柄连接到另一个客户端。