MAP_SHARED
时间: 2023-09-13 14:03:45 浏览: 50
MAP_SHARED是mmap函数中的一个标志位,它表示创建的映射区是与其他进程共享的。这意味着多个进程可以同时访问和修改这个映射区的内容。当一个进程对这个映射区进行写操作时,对应的物理页内容会被写回到文件中,这样其他进程也能看到修改后的内容。在使用MAP_SHARED标志位时,需要确保文件打开权限足够允许读写操作,并且必须设置适当的访问权限以匹配文件打开权限。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关问题
MAP_SHARED和匿名
MAP_SHARED和匿名是两个不同的概念。
MAP_SHARED是在内存映射中使用的一个标志,表示将文件映射到多个进程的虚拟地址空间中,并且这些进程可以共享对该文件的访问。这个标志可以用于共享内存区域,从而实现进程间通信。
而匿名则是指不使用文件进行内存映射,而是直接在虚拟地址空间中分配一段连续的内存区域。这个内存区域不与任何文件相关联,也不会被写入磁盘。
在使用内存映射时,可以使用MAP_SHARED标志将文件映射到多个进程的虚拟地址空间中,从而实现进程间通信。如果不需要使用文件进行内存映射,可以使用匿名内存映射来共享内存区域。
MAP_SHARED mmap的示例
下面是一个使用 `mmap()` 函数创建共享内存的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#define FILE_LENGTH 0x1000
int main(int argc, char* const argv[]) {
int fd, count;
void* file_memory;
// 打开文件
fd = open(argv[1], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
// 调整文件大小
lseek(fd, FILE_LENGTH+1, SEEK_SET);
write(fd, "", 1);
lseek(fd, 0, SEEK_SET);
// 映射文件到内存
file_memory = mmap(NULL, FILE_LENGTH, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
// 使用映射的内存
for (count = 0; count < 60; ++count) {
sprintf((char*)file_memory, "%d\n", count);
sleep(1);
}
// 解除映射
munmap(file_memory, FILE_LENGTH);
return 0;
}
```
该程序打开一个文件,将其调整为指定大小,然后将其映射到进程空间中。它在映射的内存中写入数字并等待一秒钟,然后再次写入另一个数字。最后,它解除映射并退出。可以同时运行多个这样的程序来共享内存。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)