IPC主题三之共享内存

一、共享内存的定义

共享内存就是几个进程能访问到物理地址上的同一块空间,从而实现进程间通信。共享内存是不具备同步和互斥机制的。

二、函数解析

(1)int shmget( key_t key, size_t size, int flag );
作用:创建或打开一块共享内存区

参数:
第一个参数key:用来变换成一个标识符,而且每一个IPC对象与一个key相对应。
第二个参数size:当新建一个共享内存段时,size参数为要请求的内存长度(以字节为单位)
第三个参数flag:shmflg是权限标志,它的作用与open函数的mode参数一样,如果要想在key标识的共享内存不存在时,创建它的话,可以与IPC_CREAT做或操作。

(2)void *shmat( int shm_id, const void *addr, int flag );
作用:将一个存在的共享内存段连接到本进程空间

参数:
第一个参数shm_id:是由shmget函数返回的共享内存标识。
第二个参数shm_addr:指定共享内存连接到当前进程中的地址位置,通常为空,表示让系统来选择共享内存的地址。
第三个参数shm_flg:是一组标志位,通常为0

(3)int shmdt( void *addr);
作用:将指定的共享内存段从当前进程空间中脱离出去

参数:shmaddr是shmat函数返回的地址指针

(4)int shmctl( int shm_id, int cmd, struct shmid_ds *buf );
作用:对共享内存段进行多种操作

参数:
第二个参数command:是要采取的操作,它可以取下面的三个值 :
IPC_STAT:把shmid_ds结构中的数据设置为共享内存的当前关联值,即用共享内存的当前关联值覆盖shmid_ds的值。
IPC_SET:如果进程有足够的权限,就把共享内存的当前关联值设置为shmid_ds结构中给出的值
IPC_RMID:删除共享内存段
第三个参数shmid_ds:buf是一个结构指针,它指向共享内存模式和访问权限的结构

三、共享内存的实现
画图解释:
这里写图片描述
(1)在物理地址上开辟一块共享内存
(2)进程通过函数挂接到这块共享内存上去
(3)进程间进行通信
(4)取消虚拟地址与物理地址的挂接
(5)关闭共享内存

实例:https://github.com/lvjiabao/linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值