使用命名管道(或其他内容)作为内存中的文件

时间:2010-12-03 12:16:57

标签: windows winapi file pipe

我已经浏览了一段时间的WinAPI文档,但我似乎无法找到答案。我想要实现的是为程序提供一个文件名,它可以打开并使用它,就像磁盘上的普通文件一样。但我希望这个对象存在于内存中。

我尝试使用命名管道,但它们可以在某些情况下工作,但并非总是如此。我创建一个命名管道并将其作为常规文件传递给子进程。当进程存在时,我从管道中收集数据。

program.exe \\.\pipe\input_pipe

虽然面临一些限制。其中之一是他们不可寻求。第二个限制是它们应该以恰当的权限打开。我发现的第三个问题是,在另一端打开之前,您无法将任何数据预先放入双工管道中。有没有办法克服命名管道的限制?

或者可能有其他类型的对象可以使用CreateFile打开,然后使用ReadFileWriteFile进行访问。到目前为止,我看到的唯一解决方案是创建一个文件系统驱动程序并自己实现所有功能。

为了说清楚,我想指出我无法改变我正在运行的子程序。主要的想法是给该程序一些它认为是普通文件的东西。

更新:我不是在寻找涉及安装任何外部软件的解决方案。

3 个答案:

答案 0 :(得分:4)

Memory-mapped files可以让你做你想做的事。

编辑:

重新阅读问题 - 由于接收程序已使用CreateFile/ReadFile/WriteFile且无法修改,因此无效。我想不出在第三方或自编的RAMDisk解决方案之外做OP想要的方法。

答案 1 :(得分:2)

正如您似乎建议的那样,最简单的解决方案可能是使用a Ramdisk将虚拟驱动器映射到内存。显然,您写入或从该虚拟驱动器读取的任何文件都将完全包含在RAM中(假设它没有被分页到磁盘)。

我自己已经做过几次这样的事情来加速完全受磁盘限制的进程。

答案 2 :(得分:0)

调用CreateFile但使用FILE_ATTRIBUTE_TEMPORARY,也可能调用FILE_FLAG_DELETE_ON_CLOSE。

除非系统物理内存不足,否则文件将永远不会到达磁盘。