在Linux 2.6

时间:2018-02-10 18:56:30

标签: c linux mmap

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

由于Linux 2.6没有memfd_createO_TMPFILE的{​​{1}}标记,我目前正在使用open创建一个文件,然后取消关联它没有先关闭它。这很有效,但它根本不会让我高兴。

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

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

由于

1 个答案:

答案 0 :(得分:0)

我考虑了两种方法:

  1. /dev/shm/而不是/tmp/
  2. 下创建我的临时用户
  3. 使用shm_open获取文件描述符。
  4. 虽然与手头的具体问题无关,但并不保证所有发行版都存在/dev/shm/,所以#2对我来说更正确。

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

    我想我对此很满意。

    喊出@NominalAnimal。