我正在使用管道在两个vxWorks任务之间传输信息。
以下是代码示例:
Init()
{
fd = open("/pipe/mydev", O_RDWR, 0777);
...
}
taskRx()
{
...
len = read(fd, rxbuf, MAX_RX_LEN);
...
}
taskTx()
{
...
len = write(fd, txbuf, txLen);
...
}
如果我们发送的消息长于MAX_RX_LEN(即txLen> MAX_RX_LEN),我们会进行2次读取以获取消息的剩余部分。
我们注意到第二次阅读没有收到任何数据!
为什么?
答案 0 :(得分:2)
VxWorks的管道机制基于不流(与unix命名管道不同)。
它是vxWorks消息队列工具之上的一个层。因此,它具有与消息队列相同的限制:从管道读取时,您实际上是在阅读整个消息。如果接收缓冲区没有足够的空间来存储接收的数据,则只会丢弃溢出。
在消息队列或管道上进行接收时,请务必确保将缓冲区设置为队列元素的最大大小。