一、关于共享内存
大小自定义
没有读阻塞:为空的话,读到无效数据
没有写阻塞:写入长度大于内存长度,越界
二、共享内存的操作流程
key ---- 申请对象 -----映射对象 ---- 读写对象 ----撤销映射 ---- 删除对象
申请对象(使用唯一键值key向内核提出共享内存的使用申请):、
int shmget(key_t key,size_t size,int shmflg(IPC_CREAT|0666))
size:4K的整数倍
创建临时键值(将指定路径用来生成唯一临时键值):
key_t ftok(路径,int proj_id)
映射对象(将指定shmid 对应的共享内存映射到本地内存):
shmat(int shmid,const void *shmaddr,int shmflag)
删除对象(修改共享内存属性,可以删除指定的共享内存对象)
shmctl(int shmid,int cmd,struct shmid_ds *buf)
cmd IPC_RMID 删除对象的宏
buf NULL 只删除对象
三、信息缓冲机制
多线程之间数据交互,匹配运行速度的快慢(多线程+链表+队列)。速度产生快使用慢,可以使用循环覆盖队列。
几个命令:ipcs -a 查询共享内存,信号量集,消息队列
ipcrm -s 删除信号量集
ipcd -m 删除共享内存