linux网络编程之共享内存简介和mmap函数
二、mmap 函数 #include <sys/mman.h> 功能:将文件或者设备空间映射到共享内存区。 原型 void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset); 参数 addr: 要映射的起始地址,通常指定为 NULL,让内核自动选择 len:映射到进程地址空间的字节数 prot:映射区保护方式 flags:标志 fd:文件描述符 offset:从文件头开始的偏移量,必须是页大小的整数倍(在32位体系统结构上通常是4K) 返回值:成功返回映射到 的内存区的起始地址;失败返回-1 prot 参数取值: PROT_EXEC 表示映射的这一段可执行,例如映射共享库 PROT_READ 表示映射的这一段可读 PROT_WRITE 表示映射的这一段可写 PROT_NONE 表示映射的这一段 不可访问 flag参数有很多种取值,这里只讲两种,其它取值可查看mmap(2) MAP_SHARED 多个进程对同一个文 件的映射是共享的,一个进程对映射的内存做了修改,另一个进程也会看到这种变化。 MAP_PRIVATE 多个进程对同 一个文件的映射不是共享的,一个进程对映射的内存做了修改,另一个进程并不会看到这种变化,也不会真的写到文件中去 。 内存映射文件示意图: 如果mmap成功则返回映射首地址,如果出错则返回常数MAP_FAILED。当进程终止时,该进程的映射内存会自动解除,也 可以调用munmap解除映射: 功能:取消mmap函数建立的映射 原型 int munmap(void *addr, size_t len); 参 数 addr: 映射的内存起始地址 len:映射到进程地址空间的字节数 返回值:成功返回0;失败返回-1 (编辑:源码门户网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |