0

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

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

这是为什么?

4

1 回答 1

2

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

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

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

于 2008-09-22T20:46:11.400 回答