博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qnx:从API开始理解QNX -- 消息传递
阅读量:6293 次
发布时间:2019-06-22

本文共 1362 字,大约阅读时间需要 4 分钟。

   http://www.openqnx.com/chinese/viewtopic.php?f=5&t=2161

1. 频道与连接
    Channel, Connect
    
    server:
        ChannelId = ChannelCreate(Flags);
    client:
        ConnectionId = ConnectAttach(Node, Pid, Chid, Index, Flag);
        Node: 机器号; Pid是服务进程号; Chid就是ChannelCreate后得到的频道号.
    连接的终止是ConnectDetach(),而频道的结束则是ChannelDestroy()了。不过,一般服务器都是长久存在的,不大有需要ChannelDestroy()的时候。
2.     发送,接收与应答
    Send, Receive, Reply
    server:
        RecieveId = MsgReceive(ChannelId, ReceiveBuffer, ReceiveBufLength,&MsgInfo);
        ...Deal Recvd Msg....
        MsgReply(ReceiveId, ReplyBuf, ReplyLen);    
        
    client:
        MsgSend(ConnectionId, SendBuf, SendLen, ReplyBuf, ReplyLen);
        ....然后由OS将这个线程挂起...
        ....当服务器MsgReply()后,OS解除线程阻塞状态,客户端可以检查自己的ReceiveBuf看看应答效果...
        
3. 数据区与iov
虽然在客户端Header同databuf是两块不相邻的内存,但传递到服务器端的ReceiveBuffer里,就是连续的了。
客户端: "header" 与 "databuf" 是不连续的两块数据。
    SETIOV(&iov[0], &header, sizeof(header));
    SETIOV(&iov[1], databuf, datalen);
    MsgSendvs(ConnectionId, iov, 2, Replybf, ReplyLen);
服务器: 接收后,"header"与"databuf"被连续地存在ReceiveBuffer里。
    ReceiveId = MsgReceive(ChannelId, ReceiveBuffer, ReceiveBufLength, &MsgInfo);
    header = (struct header *)ReceiveBuffer;
    databuf = (char *)((char *)header + sizeof(*header));
    当指定的ReceiveBufLength小于实际收到的字节数,即MsgReceive不一定读完了所有来自client的数据,因此还需要查看MsgInfo,并使用MsgRead(ReceiveId,
                                ReceiveBuffer+ReceiveBufLength, // 指定存数据buffer起始地址
                                ReceiveBufLength, // 去缓冲区读数据时候的偏移量
                                MsgInfo->srcmsglen - MsgInfo->msglen    // 未读取完的数据长度    
                            ));
   

转载地址:http://yhdta.baihongyu.com/

你可能感兴趣的文章
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>