进程间通讯(IPC)——消息队列

消息:可以简单理解为类型+数据
消息类型需大于等于1,0代表着不区分消息类型,也可以认为是任何类型

struct mess
{
  long int type;//>=1
  ...//存储的数据
}

消息队列在同一类型上的消息传递符合先进先出的规定,对于整个消息队列而言,类优先级队列
引用头文件#include <sys/msg.h>

消息队列的使用:

创建
int msgget( ket_t )key , int flag);

返回值为内核对象的标识符,即所创建的消息队列的标识符,创建失败返回-1
flag标志位,这里一般给出 IPC_CREAT | 权限 ,例如:IPC_CREAT|0600

发送消息
int msgsnd( int msgid , void*ptr , int datalen , int flag );

msgid:内核对象的标识符,即msgget返回值,ptr指向结构体消息,指向的消息数据类型包含一个long int的类型字段,以及数据字段。datalen:数据部分的有效长度,flag:标志位,此处我们一般默认给0。

接收消息
int msgrcv( int msgid , void* ptr , int size , long type , int flag );

size:消息数据部分的有效长度,type:想要接受的消息的消息类型,flag:标志位,此处我们一般默认给0。

删除内核对象消息队列的IPC结构,即释放资源,使用下面设置属性函数
设置属性:int msgctl( int msgid , int cmd , struct msgid_ds*buff );
cmd:命令,删除是IPC_RMID,struct msgid_ds*buff我们一般默认给0。

阻塞:若消息队列放满消息,则发送端msgsnd()会阻塞,消息队列为空,则msgrcv()会阻塞。

发送与获取消息时,必须指定消息类型,值一般>=1,0不区分消息类型或可理解为表示所有消息类型

Linux终端命令行操作命令:
ipcs -q 查看消息队列
ipcs -q msgid 删除消息队列

代码如下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值