加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux网络编程之共享内存简介和mmap函数

发布时间:2016-05-26 20:49:40 所属栏目:Linux 来源:网络整理
导读:一、共享内存简介 共享内存区是最快的IPC形式,这些进程间数据传递不再涉及到内核,换句话说是进程不再通 过执行进入内核的系统调用来传递彼此的数据。 即每个

二、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 多个进程对同 一个文件的映射不是共享的,一个进程对映射的内存做了修改,另一个进程并不会看到这种变化,也不会真的写到文件中去 。

内存映射文件示意图:

linux网络编程之共享内存简介和mmap函数

如果mmap成功则返回映射首地址,如果出错则返回常数MAP_FAILED。当进程终止时,该进程的映射内存会自动解除,也 可以调用munmap解除映射:

功能:取消mmap函数建立的映射

原型 int munmap(void *addr, size_t len);

参 数

addr: 映射的内存起始地址

len:映射到进程地址空间的字节数

返回值:成功返回0;失败返回-1

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读