在 Linux 2.6 上模拟 memfd_create

simulating memfd_create on Linux 2.6

我正在向后移植一段代码,该代码使用涉及传递给 mmap 的文件描述符的虚拟内存技巧,但没有安装点。拥有物理文件将是此应用程序中不必要的开销。原始代码使用 memfd_create 很棒。

因为 Linux 2.6 没有 memfd_createopenO_TMPFILE 标志,我目前正在用 mkstemp 创建一个文件并且然后取消链接而不先关闭它。这行得通,但我一点也不满意。

在 2.6 中,有没有更好的方法来获取用于 mmap 目的的文件描述符,而无需触及文件系统?

在有人说 "XY problem," 之前,我真正需要的是内存中相同数据的两个不同的虚拟内存地址。这是通过 mmap 将同一个匿名文件发送到两个不同的地址来实现的。也欢迎任何其他 "Y" 到我的 "X"。

谢谢

我考虑了两种方法:

  1. /dev/shm/ 而不是 /tmp/
  2. 下创建我的临时文件
  3. 使用shm_open获取文件描述符。

虽然与手头的具体问题无关,但不能保证 /dev/shm/ 存在于所有发行版中,所以我觉得 #2 更正确。

为了不必担心共享内存对象的唯一名称,我只生成 UUID。

我想我对此很满意。

向@NominalAnimal 致敬。