进程间通信方式之(四)共享内存
来源:互联网 发布:专业的数控编程软件 编辑:程序博客网 时间:2024/05/20 17:09
对象:共享内存(share memory),消息队列(message quene),信号灯(semaphore)
共享内存:特点:(1)是一种最为高效的进程间的通信的方式,进程可以直接读写,而不需要任何数据的拷贝
(2)为了在进程间交换消息,内核专门留出了一块内存区,可以由需要访问的进程将其映射
到自己的私有地址空间
(3)进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而提高效率
(4)由于多个进程共享一段内存,因此需要一些共享机制,比如:互斥锁和信号量等
实现步骤:
(1)创建或打开内存
(2)映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问
(3)撤销共享内存映射
(4)删除共享内存映射
int shmget(key_t key,int size,int shmflg);
函数参数:IPC_PRIVATE或ftok
size :共享内存区的大小
shmflg:同open函数的权限位,也可以用8进制表示法
返回值:成功返回内存段标识符,
出错返回-1
void *shmat(int shmid,const void *shmaddr,int shmflg);
函数参数:shmid:要映射的共享内存区的标识符
shmaddr:将共享内存映射到指定位置(若为NULL,则表示由系统自动完成映射)
shmflg:SHM_RDONLY(共享内存只读),默认0(共享内存可读可写)
返回值:成功返回映射的地址,
出错返回-1
int shmdt(const void *shmaddr);
函数参数:shmaddr:共享内存映射后的地址
函数返回值: 0成功, -1出错
int shmclt(int shmid,int cmd,struct shmid_ds *buf)
函数参数:shmid:要操作的共享内存标识符
cmd:IPC_STAT(获取对象属性)
IPC_SET(设置对象属性)
IPC_RMID(删除对象)
buf:指定IPC_STAT/IPC_SET时用以保存/设置属性
函数返回值 0成功,-1出错
共享内存:特点:(1)是一种最为高效的进程间的通信的方式,进程可以直接读写,而不需要任何数据的拷贝
(2)为了在进程间交换消息,内核专门留出了一块内存区,可以由需要访问的进程将其映射
到自己的私有地址空间
(3)进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而提高效率
(4)由于多个进程共享一段内存,因此需要一些共享机制,比如:互斥锁和信号量等
实现步骤:
(1)创建或打开内存
(2)映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问
(3)撤销共享内存映射
(4)删除共享内存映射
int shmget(key_t key,int size,int shmflg);
函数参数:IPC_PRIVATE或ftok
size :共享内存区的大小
shmflg:同open函数的权限位,也可以用8进制表示法
返回值:成功返回内存段标识符,
出错返回-1
void *shmat(int shmid,const void *shmaddr,int shmflg);
函数参数:shmid:要映射的共享内存区的标识符
shmaddr:将共享内存映射到指定位置(若为NULL,则表示由系统自动完成映射)
shmflg:SHM_RDONLY(共享内存只读),默认0(共享内存可读可写)
返回值:成功返回映射的地址,
出错返回-1
int shmdt(const void *shmaddr);
函数参数:shmaddr:共享内存映射后的地址
函数返回值: 0成功, -1出错
int shmclt(int shmid,int cmd,struct shmid_ds *buf)
函数参数:shmid:要操作的共享内存标识符
cmd:IPC_STAT(获取对象属性)
IPC_SET(设置对象属性)
IPC_RMID(删除对象)
buf:指定IPC_STAT/IPC_SET时用以保存/设置属性
函数返回值 0成功,-1出错
0 0
- 进程间通信方式之(四)共享内存
- 进程间通信之共享内存(四)
- 进程间通信(四)---- 共享内存
- 进程间通信(四)共享内存
- linux进程间通信方式 -- 共享内存
- 进程间通信 共享内存shmget方式
- Windows环境进程间通信(二):共享内存方式
- linux进程间通信之共享内存
- 进程间通信之共享内存篇
- linux进程间通信之共享内存
- 进程间通信之共享内存
- 进程间通信之共享内存
- 进程间通信之共享内存
- 进程间通信之共享内存篇
- 进程间通信之共享内存
- Linux进程间通信之共享内存
- Linux进程间通信之共享内存
- 进程间通信之共享内存
- js快排
- MQTT - 开始使用
- 微动学习记录之linux服务器安装centOS 6.8系统
- 浅析linux设备驱动的clock(时钟)的注册
- 多态易错题3
- 进程间通信方式之(四)共享内存
- Unity 摄像机按照中心点移动
- 史上最全Html和CSS布局技巧
- Nand Flash的驱动程序
- tjut 3594
- JZOJ 4770 闭门造车(平面最近点对)
- (dubbo学习)MyEclipse中从github上clone dubbo源代码
- poi将excel转换成list集合,excel导入
- [python3]北邮教务爬虫