Linux进程间通信(IPC) - 消息队列

一、消息队列的特点

消息队列是另外一种Linux下进程间通信的方式,可以在相互独立的进程间进行通信。通过在内核维护一个消息队列链表来通信,允许在进程间以异步的方式进行数据交换。相比与之前提到的共享内存,消息队列能传输特定类型的消息,可以根据先进先出的方式获取消息体,也可以获取特定类型的消息体,使得通信更加的便捷。消息队列有以下几个特点: 

  1. 异步通信: 进程间传输数据不需要同步,可以随时传输
  2. 消息类型: 发送和接收都可以指定消息类型
  3. 先进先出: 如果不指定消息类型,则是按先进先出的方式来获取消息体

二、常见的API分析

1,msgget函数,用于创建或者获取一个消息队列标识符ID, 定义如下:

int msgget(key_t key, int msgflg);

key:键值,通过ftok获取,或者直接指定,key值唯一确定消息队列标识符ID

msgflag:消息队列的创建标志,同时还可以指定访问权限

        IPC_CREATE : 消息队列不存在则创建

        IPC_EXCL: 如果和IPC_CREATE一起使用,如果存在则返回错误,并返回已存在的错误码EEXIST

 使用示例如下:

msgId = msgget(key, IPC_CREAT|IPC_EXCL|0666);
if(msgId == -1){
   if(errno == EEXIST)  //已存在则去获取
   {
      msgId = msgget(key, 0666);
   }
}

2. msgsnd函数:发送消息,成功返回0,失败则返回-1,定义如下:

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

msqid:消息队列标识符

msqp:消息体地址,一般是一个以下的自定义结构体:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深耕嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值