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