分别创建 Windows 个命名管道
Create Windows named pipe separately
据我了解,在 Windows 上,创建命名管道的进程拥有 "server" 句柄(管道的一侧)。
是否可以将管道创建与实际使用分开(打开它进行读写)?
我需要用一个进程创建一个命名管道,但使用另外两个进程打开它进行读写。
但我担心的是,当创建管道的进程退出时,管道会从文件系统中删除。
命名管道的存在完全是因为您所说的那种情况。
对于匿名管道(参见CreatePipe
),有必要在某处创建管道的"factory",然后至少将其中一个句柄传递给"client" 某处(是否在同一进程内)。
有了命名管道(参见 CreateNamedPipe
),就没有必要创建和分发句柄的 "factory"。相反,命名管道的 "server" 端直接使用正确的管道名称执行 CreateNamedPipe
,而命名管道的 "client" 端直接使用管道名称 CreateFile
打开命名管道的客户端。每一方都适当地处理它的错误条件。如果实施正确,则无需额外协调。
如果您的应用程序需要一个用于命名管道的 "factory" 进程(它不应该),那么您必须想出自己的方法来为 "client" 进程提供句柄以管道不会在此期间被破坏的方式。或者您可以使用管道名称而不是分配句柄,但您可能必须使用命名事件之类的东西在进程之间明确协调(请参阅 CreateEvent
)。
如果这不能回答您的问题,请使用更多详细信息更新您的问题。
据我了解,在 Windows 上,创建命名管道的进程拥有 "server" 句柄(管道的一侧)。 是否可以将管道创建与实际使用分开(打开它进行读写)?
我需要用一个进程创建一个命名管道,但使用另外两个进程打开它进行读写。 但我担心的是,当创建管道的进程退出时,管道会从文件系统中删除。
命名管道的存在完全是因为您所说的那种情况。
对于匿名管道(参见CreatePipe
),有必要在某处创建管道的"factory",然后至少将其中一个句柄传递给"client" 某处(是否在同一进程内)。
有了命名管道(参见 CreateNamedPipe
),就没有必要创建和分发句柄的 "factory"。相反,命名管道的 "server" 端直接使用正确的管道名称执行 CreateNamedPipe
,而命名管道的 "client" 端直接使用管道名称 CreateFile
打开命名管道的客户端。每一方都适当地处理它的错误条件。如果实施正确,则无需额外协调。
如果您的应用程序需要一个用于命名管道的 "factory" 进程(它不应该),那么您必须想出自己的方法来为 "client" 进程提供句柄以管道不会在此期间被破坏的方式。或者您可以使用管道名称而不是分配句柄,但您可能必须使用命名事件之类的东西在进程之间明确协调(请参阅 CreateEvent
)。
如果这不能回答您的问题,请使用更多详细信息更新您的问题。