【Linux系统编程】进程间通讯--共享内存

     共享内存区域说白了就是多个进程共享的一块物理内存地址,只是将这块物理内存分别映射到自己的虚拟地址空间上。假设有10个进程将这块区域映射到自己的虚拟地址上,那么,这10个进程间就可以相互通讯。由于是同一块区域在10个进程的虚拟地址上,当第一个进程向这块共享内存的虚拟地址中写入数据时,其他9个进程都会看到。但是进程之间使用这块共享内存时,必须通过信号量做同步控制。管道和消息队列由操作系统来控制,而共享内存需手动同步。

     API接口:

     int shmget((key_t)key,int sharedsize,int flag);//创建或获取内核对象

     void* shmat(int shmid,const void* addr,int flag);//将进程中虚拟地址映射到指定内核对象开辟的物理内存上,并将虚拟地址返回

     int shmdt(void* addr);//将虚拟地址与共享内存区域断开连接

     int shmctl(int shmid,int cmd,struct shmid_ds *buf);//共享内存的控制函数

     共享内存是最快的IPC(进程间通讯简称)原因:

     1.在通讯之前访问内核对象时,需要用户态切换内核态。但是当真正发送数据时,直接通过指针操作空间,不需要用户态切换内核态。

     2.发送方可以直接通过指针将数据写入共享内存区域,接收方直接通过指针操作共享内存区域的数据。相比管道、消息队列少了两次数据拷贝。

     命令:

     ipcs -m 查看共享内存

     ipcrm -m shmid 删除共享内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值