码迷,mamicode.com
首页 > 系统相关 > 详细

Linux学习日志--共享内存

时间:2018-03-23 11:42:00      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:sdn   默认   body   white   注意   mmu   process   失败   class   

一:什么是共享内存

? ? ? ? ? ? 共享内存是属于IPC(Inter-Process Communication进程间通信)机制,其它两种是信号量和消息队列,该机制为进程开辟创建了特殊的地址范围,就像malloc分配那样。进程能够将同一段共享内存连接到自己的地址空间上。从而操作共享内存。所以说。共享内存提供了多个进程之间共享和传递数据一种方式。须要注意的是:该机制没有提供同步机制,所以我们须要採取有效的机制来同步对共享内存的訪问。


二:共享内存的原理图


? ??


? ? ? ? ??技术分享图片


三: 相关的函数


头文件:

? ?

#include?<sys/types.h>

#include?<sys/ipc.h>

#include?<sys/shm.h>


创建或打开函数:

int?shmget(key_t?key,?int?size,?int?shmflg);

參数:第一个key是程序提供的,用于给共享内存命名。假设该命名的共享内存已经打开,则直接返回该内存标识。

? ? ? ? ? ? 第二个sie是规定内存的大小。

? ? ? ? ? ? 第三个是掩码合成值。包含权限值和IPC_CREAT或IPC_EXCL。比如:0600|IPC_CREAT 代表可读写而且假设该内存不存在,就创建一个。

?

返回:调用成功,返回内存标识。失败,返回-1.


连接函数:

void?*shmat(int?shmid,?const?void?*shmaddr,?int?shmflg);

作用://映射进程和共享内存的地址空间

參数:

? ? ? ? ? ? 第一个shmid是创建函数返回标识。

? ? ? ? ? ? 第二个shmaddr 是共享内存在进程的地址位置。通常为NULL。让系统默认。

? ? ? ? ? ? 第三个shmflg是位标识。通常为0

返回:调用成功,返回指向共享内存第一个字节的指针。失败,返回-1;


分离函数:

int?shmdt(const?void?*shmaddr);//用于分离进程空间和共享内存段

返回:调用成功,返回0 ? ?失败。返回-1。


删除共享内存段函数:

int?shmctl(int?shmid,?int?cmd,?struct?shmid_ds?*buf);

參数:

? ? ? ? ? ? 第一个shmid是创建函数返回标识。

? ? ? ? ? ? 第二个cmd 是对共享内存操作。 通常为IPC_RMID ?代表删除。

? ? ? ? ? ? 第三个通常为NULL





Linux学习日志--共享内存

标签:sdn   默认   body   white   注意   mmu   process   失败   class   

原文地址:https://www.cnblogs.com/llguanli/p/8628854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!