【问题标题】:Named pipe C# using .NET 3.5 features like NamedPipeClientStream使用 NamedPipeClientStream 等 .NET 3.5 功能的命名管道 C#
【发布时间】:2009-11-12 10:38:14
【问题描述】:

Windows(以及其他操作系统以及进程范围)中的命名管道?

我有一个奇怪的场景:

我写了一个程序,比如说“Controller.exe”,它会产生一堆“Workers.exe”,然后 Controller.exe 通过“PipeN”创建一个名为“Pipe0”的命名管道。

然后 Workers.exe(以命令行 arg 作为管道名称开始)连接到该管道。

因此,此 controller.exe 的客户生成负载启动了 5 个程序实例(“controller.exe”),该程序创建了 5 次 Worker.exe 进程

但在我的 Controller.exe 代码中,我创建了一个名为“Pipe0”...“PipeN”的命名管道...所以我的问题是它是如何工作的!?

命名管道不是操作系统范围的吗?至于Worker.exe如何知道要连接到哪个命名管道“pipe0”?

【问题讨论】:

    标签: c# named-pipes pipe


    【解决方案1】:

    我不知道 *NIX,但在 Windows 中,它们与命名内核对象(例如命名互斥体)位于相同的命名空间中,所有进程都共享该命名空间。至于要监听哪个管道,将其作为命令行参数传递。

    【讨论】:

    • 对,这就是我所做的......所以你说“PipeO”是全局的,任何与“Pipe0”对话的进程都会获得相同的管道引用?
    • 可以,只要不把大写字母O和数字0搞混。
    【解决方案2】:

    查看Named Pipe MSDN Page 了解有关机制的说明。在您的场景中,随后尝试创建具有相同名称的管道可能会导致 INVALID_HANDLE_VALUE 错误。至少CreateNamedPipe Function Reference 是这么说的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2011-01-27
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      相关资源
      最近更新 更多