Welcome 微信登录

首页 / 操作系统 / Linux / Linux下运用MMAP在进程间通信

由于在操作系统层面,各个进程所看到的虚拟地址空间是独立的,之间没有交集。因此需要通过中间一个关联将多个关联进程的不同虚拟地址映射到相同的物理地址空间中。MMAP 就是这么一个功能,它把一个文件(也就是在内存中的物理地址空间确定)映射到不同进程的地址空间中。一、写
值得注意的是由于MMAP需要内存中的物理地址空间,因此在写操作过程中需要将文件加载到内存中才能进行操作,因此在打开文件后需要进行写操作,引起缺页异常,将文件映射到内存中。
  1. fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC,00777);  
  2. lseek(fd, 4, SEEK_SET);<span style="color:#ff0000;">//这里size最好为共享的结构体的大小,将整个需要的大小都加载到内存中   
  3. </span>write(fd,"",1);  
  4. p_mmap = (int *) mmap(NULL, sizeofint), PROT_READ | PROT_WRITE, MAP_SHARED, fd , 0);  
  5. close(fd);  
  6.   
  7. *(p_mmap) =1;  
如果不进行写空操作便直接进行mmap映射,便会造成段错误,因为实际的fd对应的物理内存不存在。二、读读进程必须在写进程之后调用mmap,否者会出现段错误,和前面一样的道理。读进程流程
  1. fd= open(argv[1], O_CREAT |O_RDWR, 0077);  
  2. p_mmap = (int *) mmap (NULL, sizeofint), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);  
  3. printf("data: %d  ", (*(p_mmap)));  
VMWare安装Gentoo错误“cannot open root device sda3...”Red Hat Enterprise Linux 5下搭建Nutch 1.3相关资讯      Linux基础教程 
  • Linux基础教程:对文件打包压缩  (03月08日)
  • 基础教程:Linux 新手应该知道的   (09/06/2015 21:17:20)
  • Linux基础教程:find 与 xargs  (04/05/2015 10:20:11)
  • Linux基础教程:tar 命令使用介绍  (12/03/2015 13:19:47)
  • Linux基础教程(1)操作系统基础   (08/15/2015 20:44:01)
  • Linux基础教程:从源码安装软件  (04/05/2015 10:14:45)
本文评论 查看全部评论 (0)
表情: 姓名: 字数