【问题标题】:Why can't I open a named pipe more than once?为什么我不能多次打开命名管道?
【发布时间】:2012-05-12 06:04:09
【问题描述】:

我似乎无法从 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 函数连接到另一个客户端。"
  • @antti.huima:那是我的问题,谢谢! (你应该写一个真实的答案!)

标签: php windows named-pipes


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-12
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多