【问题标题】:Creating a memory file创建内存文件
【发布时间】:2017-02-24 23:08:31
【问题描述】:

我想在内存中创建一个临时文件,不将其写入磁盘,可以使用CreateFile 从其他进程打开该文件以进行读取,就像它是一个普通文件一样。

这是可能的还是我必须将它写入磁盘?

【问题讨论】:

  • @AmericanPatriot 因为我正在使用 Windows API,也称为 WinAPI。
  • @JacquesdeHooge fmemopen 在 Windows 上似乎不可用。
  • 是的,POSIX 就是这样。
  • @JacquesdeHooge fmemopen 返回映射到进程内存空间的FILE* - 您不能在多个进程之间共享它。为了共享,您需要通过 FS 中的路径访问的东西 - 众所周知。

标签: c++ file winapi memory createfile


【解决方案1】:

CreateFile 将文件路径作为参数。为了让其他进程能够打开它,该文件位置应映射到系统中现有的设备之一。

其中一个设备可以是 RAM 磁盘/设备,您可以在其中创建文件而无需将文件写入物理磁盘(内存交换除外)。但这需要安装和激活这样的(虚拟)设备。

如果您只需要在进程之间共享内存,请查看 shmem implementation 例如。

【讨论】:

  • 那个链接没用。 Windows 上的共享内存是使用 CreateFileMappingMapViewOfFile 完成的。
【解决方案2】:

您所要求的通常不能用CreateFile() 完成(除非您采用RAMdisk 方法),但可以使用CreateFileMapping()MapViewOfFile() 代替。可以为映射对象分配一个名称,以便跨进程边界共享它,然后多个进程可以根据需要对其打开自己的视图。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2014-12-12
    • 2013-01-07
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多