mmap():是否可以防止使用 MAP_SHARED 标志写回文件?

mmap():是否可以防止使用 MAP_SHARED 标志写回文件?

据我了解, mmap() 中的“MAP_SHARED”标志立即与其他进程共享进程对内存映射所做的任何更改,并最终将更改写回文件。是否可以与其他进程共享内存中的更改,但不将更改写回文件?它需要一种新型旗帜吗?实现这种标志(例如“MAP_SHARED_NOT_WRITE_BACK”)有多复杂?

=========================================

添加:我想到的用例:流程Ammap 是共享库 foo.so 的代码段,并对代码进行更改(例如,加密代码)。我想要其他流程,C等稍后创建并使用foo.so分享修改后的代码。但是,我不希望将更改写回foo.so文件。我更喜欢适用于多个进程和许多共享库的可扩展解决方案。

答案1

太长;博士;你应该使用只存在于 RAM 中的文件

memfd_create(2)与 Linux 上一样,文件系统是通过文件系统打开文件返回的文件tmpfs[1]。

在这种情况下,内存将由交换而不是常规文件或设备——如果配置了任何交换。请注意,如果文件很大,这会给您的系统带来压力,并严重降低其性能,带来零收益。

注意:如果您担心您的“秘密”被无意中写入永久存储,请更好地了解您的系统有哪些加密存储解决方案。

[1]shm_open(3)在 Linux 上通过简单地打开安装在/dev/shm.

相关内容