2008-09-22 63 views
0

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

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

这是为什么?

回答

2

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

它是vxWorks消息队列设备之上的一个图层。因此,它与消息队列有相同的限制:从管道读取时,您确实正在阅读整个消息。如果您的接收缓冲区没有足够的空间来存储接收到的数据,则简单地放弃溢出。

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

相关问题