11LinuxC进程间通信之内存存储映射I/O (Memory-mapped I/O)及相关函数讲解

1 内存存储映射I/O (Memory-mapped I/O)

  • 1)内存存储映射I/O简写为mmap,也是比较常用的进程间通信方式。
  • 2)mmap使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入磁盘文件。这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。这个文件中个缓冲区也叫映射区。
  • 3)使用这种方法,首先应通知内核,将一个指定文件映射到存储区域中。这个映射工作可以通过mmap函数来实现。
  • 4)映射的情况类似下图,将一个文件中的空间映射到内存,这个空间可以是文件的所有空间或者部分空间,可以自行设置,通过映射后,内存地址空间也叫映射区。
    在这里插入图片描述

2 相关函数

2.1 mmap函数。

void *mmap(void *adrr, size_t length, int prot, int flags, int fd, off_t offset); 
/*
	功能:	将文件的所有空间或者部分空间映射到缓冲区,这个缓冲区也叫映射区。
	返回:	成功:返回创建的映射区首地址;失败:MAP_FAILED宏。
	参数:	
	addr: 	建立映射区的首地址,由Linux内核指定。使用时,直接传递NULL。
	length:欲创建映射区的大小。
	prot:	映射区权限,主要使用到PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE,其余自行man查看。
	flags:	标志位参数(常用于设定更新物理区域、设置共享、创建匿名映射区)。
		  	MAP_SHARED:  会将映射区所做的操作反映到物理设备(磁盘)上。
		  	MAP_PRIVATE: 映射区所做的修改不会反映到物理设备。
	fd: 	用来建立映射区的文件的文件描述符。
	offset:映射文件的偏移位置(必须是4k的整数倍),默认偏移位置为0,表示映射整个文件大小。
*/

2.2 munmap函数

int munmap(void *addr, size_t length);	
/*
	功能:将mmap映射的区域释放,类似malloc,free。
	成功:0; 失败:-1.
	参1:mmap返回的首地址。
	参2:mmap时创建的映射区长度。
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值