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.