据我所知,在Windows上,创建命名管道的进程拥有“服务器”句柄(管道的一侧)。 是否可以将管道创建从实际使用中拆分(打开它进行读写)?
我需要使用一个进程创建一个命名管道,但是使用另外两个进程来打开它以进行读写。 但我担心的是,当创建管道的进程退出时,管道将从文件系统中删除。
答案 0 :(得分:1)
命名管道的存在完全是因为您正在讨论的场景。
使用匿名管道(请参阅CreatePipe
),有必要在某处创建管道的“工厂”,然后至少有一个句柄交给某个地方的“客户”(在相同的过程与否)。
使用命名管道(参见CreateNamedPipe
),没有必要使用“工厂”来创建和分配句柄。相反,命名管道的“服务器”端直接使用正确的管道名称执行CreateNamedPipe
,并且命名管道的“客户端”端直接使用CreateFile
管道名称来打开客户端命名管道的一侧。每一方都适当地处理其错误条件。如果正确实施,则无需额外协调。
如果你的应用程序需要对命名管道进行“工厂”处理(它不应该),那么你必须找到自己的方式来为“客户端”进程提供句柄,使得管道在过渡期间没有被销毁。或者您可以使用管道名称而不是分发句柄,但您可能必须使用命名事件之类的事件显式协调进程(请参阅CreateEvent
)。
如果这不能解答您的问题,请更新您的问题并提供详细信息。