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

时间:2012-05-12 06:04:10

标签: php windows named-pipes

我似乎无法从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命名管道,我有什么特别的缺失吗?

1 个答案:

答案 0 :(得分:2)

“在使用ConnectNamedPipe函数将句柄连接到另一个客户端之前,服务器进程必须调用DisconnectNamedPipe以断开管道句柄与其先前的客户端。”