使用vxWorks管道时为什么会丢失数据?

时间:2008-09-22 20:42:37

标签: vxworks

我正在使用管道在两个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次读取以获取消息的剩余部分。

我们注意到第二次阅读没有收到任何数据!

为什么?

1 个答案:

答案 0 :(得分:2)

VxWorks的管道机制基于流(与unix命名管道不同)。

它是vxWorks消息队列工具之上的一个层。因此,它具有与消息队列相同的限制:从管道读取时,您实际上是在阅读整个消息。如果接收缓冲区没有足够的空间来存储接收的数据,则只会丢弃溢出。

在消息队列或管道上进行接收时,请务必确保将缓冲区设置为队列元素的最大大小。