0

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

我有这个奇怪的场景:

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

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

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

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

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

4

2 回答 2

0

查看命名管道 MSDN 页面以了解该机制的描述。在您的场景中,随后尝试创建具有相同名称的管道可能会导致 INVALID_HANDLE_VALUE 错误。至少CreateNamedPipe 函数参考是这么说的。

于 2009-11-12T10:42:57.090 回答
0

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

于 2009-11-12T10:45:21.297 回答