分别创建 Windows 个命名管道

Create Windows named pipe separately

据我了解,在 Windows 上,创建命名管道的进程拥有 "server" 句柄(管道的一侧)。 是否可以将管道创建与实际使用分开(打开它进行读写)?

我需要用一个进程创建一个命名管道,但使用另外两个进程打开它进行读写。 但我担心的是,当创建管道的进程退出时,管道会从文件系统中删除。

命名管道的存在完全是因为您所说的那种情况。

对于匿名管道(参见CreatePipe),有必要在某处创建管道的"factory",然后至少将其中一个句柄传递给"client" 某处(是否在同一进程内)。

有了命名管道(参见 CreateNamedPipe),就没有必要创建和分发句柄的 "factory"。相反,命名管道的 "server" 端直接使用正确的管道名称执行 CreateNamedPipe,而命名管道的 "client" 端直接使用管道名称 CreateFile打开命名管道的客户端。每一方都适当地处理它的错误条件。如果实施正确,则无需额外协调。

如果您的应用程序需要一个用于命名管道的 "factory" 进程(它不应该),那么您必须想出自己的方法来为 "client" 进程提供句柄以管道不会在此期间被破坏的方式。或者您可以使用管道名称而不是分配句柄,但您可能必须使用命名事件之类的东西在进程之间明确协调(请参阅 CreateEvent)。

如果这不能回答您的问题,请使用更多详细信息更新您的问题。