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

1 消息
在QNX中的Message-passing通信是主从式,双向通信的,在每一个进程中都有一个线程来负责通信,当为收到回信时,线程会block住,直到收到回复信息。
消息是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不同,则较小者为最终传输的长度。
*/
ChannelCreate() Create a channel to receive messages on.
ChannelDestroy() Destroy a channel.
ConnectAttach()

最低0.47元/天 解锁文章
1855

被折叠的 条评论
为什么被折叠?



