qnx进程间通信--消息

qnx微内核支持三种基本类型的进程间通信:消息、代理和信号。

本文先学习第一种通信方法--消息。

消息是qnx中进程间通信的基本形式。一个消息是 一个将若干字节数据封装在一起组成的数据包,可以从一个进程同步地传递到另一个进程。

消息通用的C语言函数

/* 假定进程A通过发送一个请求向进程B发送消息 */

//进程A发送消息
Send(pid, smsg, rmsg, smsg_len, rmsg_len);
/*  参数说明
 *  pid   接收进程B的进程标识符
 *  smsg  保存待发送消息的缓冲区
 *  rmsg  保存接收进程B返回的回答消息
 *  smsg_len  待发送消息的长度
 *  rmsg_len  进程A可以接收的回答消息的最大长度
 */

//进程B接收消息
pid = Rcecive(0, msg, msg_len);
/*  参数说明
 *  0    表示进程B接收来自任何进程的消息
 *  msg  用于接收消息的缓冲区
 *  msg_len  接收消息缓冲区的最大长度
 *  pid      返回值为发送进程A的pid
 *  如果发送发调用Send()时所指定的smsg_len与接收方调用Recevie()时所指定的msg_len大小不同,
 *  则使用两者中较小的值作为接收缓冲区的最大数据长度。
 */

//进程B向进程A返回的应答消息
Reply(pid, reply, reply_len);
/*  参数说明 
 *  pid  接收该应答消息的进程A pid
 *  reply      应答消息缓冲区
 *  reply_len  应答消息缓冲区中数据的长度
 *  如果reply_len和rmsg_len不同,则较小者为最终传输的长度。
 */

由于qnx的C函数库是建立在消息传递的基础之上的,所以当进程使用像管道(pipe)等标准服务时,将以间接方式使用消息传递机制。

消息是一种同步机制,因此在A与B通信时会有阻塞状态。

Send请求并且发送的消息对端进程尚未接收到      SEND阻塞

Send请求并且消息已被对端进程接收但是对端尚未给应答       REPLY阻塞

Receive请求并且未收到任何消息        RECEIVE阻塞

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值