加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux的共享内存及内存映射

发布时间:2016-01-21 16:44:55 所属栏目:Linux 来源:网络整理
导读:一.POSIX共享内存的实现 共享内存是在进程间共享某一块内存。是最快一种ipc通信机构。其中posix共享内存机制 它主要是通过内存映射(mmap)机制来实现的。 在进程
副标题[/!--empirenews.page--]

一.POSIX共享内存的实现

共享内存是在进程间共享某一块内存。是最快一种ipc通信机构。其中posix共享内存机制 它主要是通过内存映射(mmap)机制来实现的。

在进程间共享内存使用如下固定步骤:

1.创建一个共享内存

int shm_open(const char *name, int oflag, mode_t mode);

name是共享内存名字,各个进程通过名字来找到同一块内存.

oflag,是这个内存属性。类似于文件属性。使用O_RDWR/O_RDONLY/O_CREAT,第一次创建共享内存必须带O_CREAT标志位。

mode,是权限代码。

当其打开成功是会在建立一个虚拟的文件 /dev/shm/shm.XXXX,其中XXXX是name的名字

例: int fd = shm_open("test",O_RDWR,666);

将会创建 /dev/shm/shm.test文件。

shm_open成功后,将返回一个文件描述符fd.你可以理解是在内核的中分配一段空间,并分配一个fd号给应用程序使用。

这里要注意,如果一个进程已经创建一个共享内存,后面其它的进程打开这个共享内存只需要用

shm_open(name,flag,0); //而且

2.设置内存大小。

int ftruncate(int fd, off_t length);

ftruncate操作的fd即可是一个文件open后的fd,也可是shm_open打开的fd  .

普通文件将会被ftruncate强行设为length大小(不够加0空间,超过则被截断

如果共享内存,将表示把共享内存设为length大小.

如果设置 ftruncate返回0

(编辑:云计算网_泰州站长网)

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

热点阅读