如何清理窗户上的命名管道

How are named pipes cleaned up on windows?

本文关键字:管道 何清理 窗户      更新时间:2023-10-16

我正在考虑使用命名管道来调试DLL的输出。我的DLL是由一个专有的封闭源代码程序加载的,该程序有时会崩溃。问题是,当程序崩溃时,我的一些当前日志输出会丢失,因为windows在将其写入磁盘之前会清理所有内容。

所以我的问题是,如果我在一个单独的进程中创建一个命名管道,并从我的DLL连接到它,而我的DLL正在崩溃并被清理的进程,我还能从第二个进程读取崩溃前写入命名管道的数据吗?

我必须在非阻塞(缓冲)庄园中写入命名管道,以便尽可能少地影响时间,什么是最佳配置?重叠IO?有人能提供一个好阅读的链接吗?(我不是C++初学者,但我是WinAPI初学者)

我不相信命名管道缓冲的数据能在一个合作伙伴失败后幸存下来。即使您设法重新打开管道,旧实例化中的任何数据都将消失。

您可以使用内存映射文件(进程间共享内存的Windows机制),但在处理共享数据空间的状态时必须小心——当进程再次唤醒时,在哪里恢复写入新数据?水槽里可能有某种"我读了这么远"的指示。您还必须在源代码中写入时刷新数据,以避免您在这个问题中发现的问题,这可能会使性能变得不理想,但您可以先进行测试,然后再进行调优。