在 Linux 2.6 上模拟 memfd_create
simulating memfd_create on Linux 2.6
我正在向后移植一段代码,该代码使用涉及传递给 mmap
的文件描述符的虚拟内存技巧,但没有安装点。拥有物理文件将是此应用程序中不必要的开销。原始代码使用 memfd_create
很棒。
因为 Linux 2.6 没有 memfd_create
或 open
的 O_TMPFILE
标志,我目前正在用 mkstemp
创建一个文件并且然后取消链接而不先关闭它。这行得通,但我一点也不满意。
在 2.6 中,有没有更好的方法来获取用于 mmap
目的的文件描述符,而无需触及文件系统?
在有人说 "XY problem," 之前,我真正需要的是内存中相同数据的两个不同的虚拟内存地址。这是通过 mmap
将同一个匿名文件发送到两个不同的地址来实现的。也欢迎任何其他 "Y" 到我的 "X"。
谢谢
我考虑了两种方法:
- 在
/dev/shm/
而不是 /tmp/
下创建我的临时文件
- 使用
shm_open
获取文件描述符。
虽然与手头的具体问题无关,但不能保证 /dev/shm/
存在于所有发行版中,所以我觉得 #2 更正确。
为了不必担心共享内存对象的唯一名称,我只生成 UUID。
我想我对此很满意。
向@NominalAnimal 致敬。
我正在向后移植一段代码,该代码使用涉及传递给 mmap
的文件描述符的虚拟内存技巧,但没有安装点。拥有物理文件将是此应用程序中不必要的开销。原始代码使用 memfd_create
很棒。
因为 Linux 2.6 没有 memfd_create
或 open
的 O_TMPFILE
标志,我目前正在用 mkstemp
创建一个文件并且然后取消链接而不先关闭它。这行得通,但我一点也不满意。
在 2.6 中,有没有更好的方法来获取用于 mmap
目的的文件描述符,而无需触及文件系统?
在有人说 "XY problem," 之前,我真正需要的是内存中相同数据的两个不同的虚拟内存地址。这是通过 mmap
将同一个匿名文件发送到两个不同的地址来实现的。也欢迎任何其他 "Y" 到我的 "X"。
谢谢
我考虑了两种方法:
- 在
/dev/shm/
而不是/tmp/
下创建我的临时文件
- 使用
shm_open
获取文件描述符。
虽然与手头的具体问题无关,但不能保证 /dev/shm/
存在于所有发行版中,所以我觉得 #2 更正确。
为了不必担心共享内存对象的唯一名称,我只生成 UUID。
我想我对此很满意。
向@NominalAnimal 致敬。