共享内存和消息队列实现进程间通信

1.对共享内存的使用往往伴随着信号量的使用,因为要实现进程间的同步。
2.
用共享内存和信号量实现两进程间的通信:在一个进程间写文字,另一个进程间读文字并打印出来(写一次打印一次)。
step1:
main.c用来写入数据(sem.c,sem.h在信号量中已经创建完善过)
在这里插入图片描述
用shmget方法创建一个共享内存,并得到它的id,如若它的id始终等于-1,就说明创建不成功。
在这里插入图片描述
创建完共享内存后要链接到一个指向字符串的指针上。
在这里插入图片描述
信号量的初始化,将其设置为两个信号量,初始化为1,0,循环输入,定义一个buff数组,将输入的信息保存到buff中。
在这里插入图片描述
要比较s和buff之前,就要对第一个初值为1的信号量进行p操作(因为后面要获取s信息了),获取资源,将buff中的值复制到s中去,紧接着对初值为零的信号量进行v操作,开始读取数据。如果字符中是end,就跳出循环。
step2:
test.c用来读数据
在这里插入图片描述
如果已经创建成功共享内存,就不在新创建,直接得到id即可。
在这里插入图片描述
链接共享内存。
在这里插入图片描述
对信号量初始化,进行读取,首次在循环体内对SEM2信号量进行获取资源操作,打印出来后进行v操作,信号量的销毁(两个进程必须有一个有销毁)
step3:运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值