操作系统学习 (Linux)进程通信-管道通信与消息队列 C语言

本文介绍了在Linux环境下,使用C语言实现进程间的管道通信和消息队列通信。通过创建子进程,分别展示了如何写入和读取数据,以及遇到的问题和解决方案。在管道通信中,子进程向文件写入数据并发送“ok”信号,另一子进程读取并显示。在消息队列通信中,同样实现了数据传递。过程中遇到接收消息函数参数错误及读取数据时出现额外字符的问题,通过调整代码得以解决。强调了正确使用库函数的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程通信-管道通信与消息队列  

基于第一篇       进程与线程的创建和使用

系统:Linux Ubuntu          编译器:gcc

过程思路:

管道通信:

1.在main()函数中创建子进程p1,p2和管道。

2.子进程p1打开给定文件(如果没有,则创建文件),并向文件中写数据,写完关闭文件,然后向消息队列写入一条消息“ok”。

3.子进程p2从消息队列读取消息,如果收到消息“ok”,则打开文件,读取文件内容,并将其输出道屏幕上,关闭文件。

消息队列:

1.创建结构体typedef struct mymsg,写好消息发送函数sendmsg(int msqid, mymsg msg)、创建管道函数int getqid()、写入文件函数writetofile()、读取文件函数readfromfile()

2.在main()函数中创建子进程p1,p2和管道。

3. 进程p1打开给定文件(如果没有,则创建文件),并向文件中写数据,写完关闭文件,然后向消息队列写入一条消息“ok”;子进程p2从消息队列读取消息,如果收到消息“ok”,则打开文件,读取文件内容,并将其输出道屏幕上,关闭文件。

图示:

管道:

消息队列:

遇到的问题:

1.接收消息函数参数传输错误,不能接收到消息。

这种情况下检查.txt文件,分析是哪里出错,再调整代码(时间太久也不记得自己当时是哪里写错了,不过应该是小问题,逻辑你没有出错都没有什么大问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值