mmap内存映射

              上一篇进程间通信和文件I\O后续

下面通过mmap函数,分析一下共享映射I\O的过程;

假设这里使用普通文件进行映射,因为现代系统大部分都是采取段页式存储,所以很明显,将普通文件的数据放进映射区的时候,是按照页面大小的整数倍进行分配的,而且文件放在物理内存中也是页的整数倍,那么文件映射的偏移量应该是页面大小整数倍。

#include <sys/mman.h>
    void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
    若成功则返回被映射区的起始地址,若出错则返回MAP_FAILED
     
    addr:指定被映射到进程空间内的起始地址,通常设为 NULL,代表让系统自动选定地址,映射成功后返回该地址。
    len:映射到调用进程地址空间中的字节数。
    prot:内存映射区域的保护方式。常用 PROT_READ | PROT_WRITE
             PROT_EXEC 映射区域可被执行
             PROT_READ 映射区域可被读取
             PROT_WRITE 映射区域可被写入
             PROT_NONE 映射区域不能存取
    flags:MAP_SHARED 和 MAP_PRIVATE 必须指定一个,其他可选。
             MAP_SHARED 调用进程对被映射数据所作修改对于共享该对象的所有进程可见,并且改变其底层支撑(物理内存) 并不是改变内存数据就马上写回磁盘。这个取决于虚拟存储的实现。
             MAP_PRIVAT
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值