消息队列与通信

本文详细介绍了消息队列通信机制的四个核心操作:创建或打开消息队列、发送消息、接收消息以及控制消息队列(如删除)。通过具体实例展示了进程间如何利用消息队列进行数据交换。

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

1.打开或创建消息队列
int msgget(key_t key,int msgflg)
成功:返回消息对列
失败:-1

标志: IPC_CREAT创建新的消息队列,没有与key对应的消息队列的情况下才创建

消息队列的格式struct msgbuf
消息的类型    long mtype
消息数据       char mtext[1]

2.发送消息到消息队列中(写消息)
int msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflg)
                    消息队列的id        指向要发送到消息   消息的大小    标志

成功:0
失败:-1

3.从消息队列中取消息(读消息)
msgrcv(int maqid,void *msgp,size_t msgsz,long msgtyp,int msgflg)

消息队列的id  存放取到的消息  希望取到的消息的最大长度  消息的类型【0:直接忽略类型,直接取消息队列的第一条消息    >0:取消息队列类型等于msgtype的第一条消息    <0:取类型比msgtyp的绝对值小的或者等于的消息,在这些消息中取最小的那条】 

成功:接收到的消息的数据量
失败:-1

4.控制消息队列(删除消息队列)
msgctl
int msgctl(int msqid,int cmd,struct msqid_ds *buf)
                消息队列     操作命令      获取内核中的msqid_ds( NULL)

IPC_RMID:用于删除消息队列的标志

成功:0
失败:-1



实例:

进程A:
1.创建消息队列

2.{
        获取键盘输入【消息类型+消息数据】
        发送消息队列
   }

3.进程终止前删除消息队列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值