一:什么是共享内存

            共享内存是属于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

最新文章

  1. Linux操作、hadoop和sh脚本小结
  2. 四、IP地址转换
  3. 当可以设置src时,不必发ajax请求,如果没有参数设置src即可
  4. 关于:1.指针与对象;2.深浅拷贝(复制);3.可变与不可变对象;4.copy与mutableCopy的一些理解
  5. 关于swiper的滚动条滑动
  6. Xcode使用心得03:打开僵尸(Zombie)模式
  7. IO流的操作规律。
  8. 微信和QQ内置浏览器为什么老是弹停止访问该网页,微信域名被屏蔽的解决办法
  9. css3整理--background-origin
  10. airflow docker
  11. P3110 [USACO14DEC]驮运Piggy Back
  12. NOIP2017普及组T1题解
  13. 总结java中的super和this关键字
  14. myeclipse10 破解版安装
  15. Windows / Windows Phone 8.1 预留应用名称及应用上传
  16. telerik:RadGrid 表格中删除数据
  17. R语言学习笔记(二十一):字符串处理中的元字符(代码展示)
  18. R实战:grid包
  19. Apache环境修改.htaccess文件实现子目录强制HTTPS访问
  20. python错误记录

热门文章

  1. Http 请求头 Range
  2. SQLite-FMDatabase用法
  3. 【转】Resharper上手指南
  4. win10易升卸载
  5. bzoj 2844 albus就是要第一个出场 异或和出现次数 线性基
  6. CentOS下Yum使用
  7. linux2.4内核调度
  8. hdu 3440(差分约束好题)
  9. getchar吸收回车
  10. Codeforces Round #449 (Div. 2) B. Chtholly&#39;s request【偶数位回文数】