文件空间映射mmap()函数

         mmap()函数用来将文件或者设备空间映射到内存中,可以通过对映射后的内存空间存取来获得与存取文件一致的空制方式,不必再使用read()write()函数。简单的说此函数就是将文件映射到内存中的某一段。

1、  mmap()函数介绍

mmap()函数的原型如下:

#inlcude <sys/mman.h>
void *mmap(*start, size_t length, int prot, int flags, int fd, off_t offset);

它将文件描述符fd对应的文件中,自offset开始的一段长length的数据空间映射到内存中。用户可以设定映射内存的地址,但是具体函数会映射到内存的位置由返回值确定。

使用mmap()函数有一个限制,只能对映射到内存的数据进行操作,即限制于开如为offset、大小为len的区域。注意不要越界操作。

mmap() 函数的参数prot,表示映射区保护方式。保护方式prot的值是一个组合值,可选如下的一个或者多个:

l  PROT_EXEC       表示映射区域可执行

l  PROT_READ      表示映射域可读取

l  PROT_WRITE    表示映射域可写入

l  PROT_NONE     表示映射域可写入

注意:prot的设置受文件打开时的选项限制,当打开文件时为只读,则写(PROT_WRITE)失效,但读仍然有效。

         参数flags用于设定映射对映的类型、选项和是否可以对映射对象进行操作(读写等),这个参数和open()函数中的含义类似。参数flags也是一个组合值,下面是其可选设置。

l  MAP_FIXED:如果参数start指定了用于需要映射至的地址,而所指的地址无法成功建立映射,则映射失败。通常不推荐使用此设置,而将start设为0,由系统自动选取映射地址。

l  MAP_SHARED:共享的映射区域,映射区域允许其他进程共享,对此映射区域写入数据将会写入到原来的文件中。

l  MAP_PRIVATE:当对映射区域进行写入操作时会产生一个映射文件的复制,即写入复制(copy on write),而读操作不会影响此复制。对此映射区的修改不会写回原来的文件,即不会影响原来文件的内容。

l  MAP_ANONYMOUS:建立匿映射。此时会忽略参数fd,不涉及文件,而且映射区域无法与其他进程共享。

l  MAP_DENYWRITE:对文件的写入操作将被禁止,只能通过对此映射区打哈哈物方式实现对文件的操作,不允许直接对文件进行操作。

l  MAP_LOCKED:将映射区锁定,此区域不会被虚拟内存重置。

注意:参数必须是MAP_PRIVATE或者MAP_SHARED二者之一的类型。

2、  munmap()函数介绍

mmap()函数对应的函数是munmap()函数,它的作用是取消mmap()函数的映射关系。其函数原型如下:

#include <sys/mman.h>
int munmap(void *start, size_t length);

         参数startmmap()函数功功后的返回值(即映射的内存地址)

         参数length为映射的长度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值