进程间通信之共享内存-系统调用mmap详解(基础篇)

        IPC-进程间通信之共享内存-系统调用mmap详解(基础篇)
(一) 系统调用和System V共享内存介绍
管道和消息队列等通信方式,需要在内核和用户空间进行四次的数据拷贝;而共享内存只拷贝两次数据,一次从输入文件到共享内存区,另一次从共享内存区到输出文件; 进程之间在共享内存时,一直保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。 Linux内核支持多种共享内存方式,如mmap()系统调用,Posix共享内存,以及System V共享内存。linux发行版本支持mmap()系统调用及System V共享内存,但还没实现Posix共享内存.

(二)系统调用mmap()
  系统调用mmap()使得进程之间通过映射同一个普通磁盘文件实现共享内存。如果采用MAP_SHARE共享内存,则对映射区域的写入数据会复制回磁盘文件内,而且允许其他映射该文件的进程共享, 原来的文件会改变。
  mmap最大的优势,就是映射文件到进程后,可以直接操作这段虚拟地址进行文件的读写操作,如常通过strxxx,memxxx函数完成,不必再调用read,write等系统调用.但需注意,直接对该段内存写时不会写入超过当前文件大小的内容.
函数原型
void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) ;
函数入参:
  fd:即将映射到进程空间的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值