据我所知,mmap()中的'MAP_SHARED‘标志与其他进程共享进程对内存映射所做的任何更改,并最终将更改写回文件。是否可以与其他进程共享内存中的更改,但不将更改写回文件?它需要一种新型的旗子吗?实现这种标志会有多复杂(例如:‘MAP_SHARED_NOT_WRITE_BACK’?
=======================================
添加:我想到的实用程序: Process mmap是共享库foo.so的代码段,并对代码进行更改(例如,加密代码)。我希望稍后创建和使用foo.so的其他进程B、C等共享修改后的代码。但是,我不希望将更改写回foo.so文件。我更喜欢适用于多个进程和许多共享库的可伸缩解决方案。
发布于 2021-08-19 20:09:44
您应该使用只存在于RAM中的文件。
与Linux一样,memfd_create(2)或打开tmpfs文件系统1返回的文件也是如此。
在这种情况下,内存将由交换来支持,而不是常规文件或设备--如果有任何交换配置的话。请注意,如果文件是大的,这将给您的系统带来压力,并严重降低其性能,为零利益。
注:如果您担心您的“秘密”被无意中写入永久存储,最好看看您的系统有哪些加密存储解决方案。
1 shm_open(3)是在Linux上通过在/dev/shm上挂载的tmpfs上打开一个文件来实现的。
https://unix.stackexchange.com/questions/665385
复制相似问题