我对存储映射I/O的理解

存储映射,就是讲磁盘文件映射到内存,则对相应内存的操作就相当于对磁盘文件的操作。

和存储映射相关的4个函数:mmap,mprotect,msync,munmap

1.void *mmap(void *addr,size_t len,int pro,int flags,int filedes,off_t offset)  /*建立存储映射*/

作用: 一、就是建立文件filedes中从offset开始起的到内存的映射,映射的长度为len,

 二、映射的地址与flags的值及addr的值有关,如果flag为MAP_FIXED则必须映射到addr指定的内存区;

 如果flag不为MAP_FIXED 且addr不为0,则是推荐给系统,映射到内存addr的位置,系统可接受也可不接受而映射到其他地址

如果flag不问MAP_FIXED且addr为0,则由内核自己分配其地址

最终的地址都将返回

三、pro 就是对存储区的读写执行等的操作。不可和打开原始文件时的操作冲突。

四、flags的值可为MAP_SHARED,MAP_PRIVATE,MAP_FIXED。

1.MAP_SHARED时,对存储区的操作直接影响到源文件

2.MAP_PRIVATE时,相当于进程对映射存储区的一个副本,对该副本的操作不会影响到源文件

3.MAP_FIXED的作用如上

 2.int mprotect(void *addr,size_t len,int pro)

建立好存储映射后,对映射区的读写执行方式进行修改


3.int msync(void *addr,size_t len,int flags)

映射存储区与源文件的同步


4.int munmap(void *addr, size_t len)

关闭映射存储区与源文件的关系,并不是消除掉映射存储区。即映像存储区仍然存在,只是此时对映像存储区的操作不再会映像到源文件。


注意:1.addr ,offset 要是页大小的整数倍。

2.必须先打开文件,放开对其进行存储映射

3.在map时将flag指定为MAP_SHARED的情况下,如果文件中的内容改变,则会自动更新映射区的内容。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值