mmap将一个文件或者其他对象映射进内存。mmap也可以实现共享内存。mmap函数调用使得进程之间通过映射同一个文件实现共享内存。文件被映射到进程地址空间后,进程可以像读写内存一样对文件进行操作。

  函数原型:void* mmap(void* addr,size_t length,int prot,int flags,int fd,off_t offset);


  addr:映射区的开始地址,设置为0时表示系统决定映射区的起始地址

  length:映射区的长度。长度单位为字节

  prot:期望的内存保护标志。取以下几个值:

       PORT_EXEC:页内容可以被执行   PORT_READ:页内容可以被读取

       PORT_WRITE:页内容可以被写入  PROT_NONE:页内容不可访问

 flag:指定映射对象的类型,映射选项与映射页是否可以共享。

            MAP_SHARED:与其他所有映射这个对象的进程共享映射空间。

              MAP_PRIVATE:建立一个写入时拷贝的私有映射。内存区域的写入不会影响到原文件。

              MAP_FIXED :使用指定的映射起始地址,如果由start和len参数指定的内存区重叠于现存的映射空                                      间,重叠部分将会被丢弃。如果指定的起始地址不可用,操作将会失败。

              fd: 有效的文件描述符。返回,由一般open()函数,其值可以设置为-1.此时需要指定flags参数为                         MAP_ANON,表明进行的是匿名映射。

             offset:被映射对象内容的起点。

 

 返回值:成功,返回被映射区的指针;失败,返回-1.

wKiom1el5IORFskaAAB9GIoxJaM705.png

wKioL1el5ITRtUhdAAAUW3Pui8w870.png