我有一个应用程序,其中多个进程在使用文件支持的内存映射创建的同一共享内存上工作。对该共享内存的读/写受到控制。
其中一个进程拥有磁盘上的文件,即使用ftruncate()调用将其初始化为特定大小。
然后,所有其他进程使用mmap(MAP_SHARED)以0作为起始偏移量但长度不同来创建到其的内存映射。
进程1- arr = mmap(0,len1 * sizeof(char),PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
进程2- arr = mmap(0,len2 * sizeof(char),PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
其中len2 当进程正在访问(读/写)此共享内存时,进程之一决定重新映射到较大长度的文件(len2 munmap(arr,len2 * sizeof(char)); arr = mmap(0,len3 * sizeof(char),PROT_READ | PROT_WRITE,MAP_SHARED,fd,0); 但是,此操作导致共享内存中以前所做的更改被清除。数组arr的所有索引的默认值为0。我的理解是,在一个进程中取消映射然后重新映射不应影响内存中存在的共享映射。什么是正确的协议?进程不共享内存中的相同映射副本吗?