2008-09-22 105 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消息隊列設備之上的一個圖層。因此,它與消息隊列有相同的限制:從管道讀取時,您確實正在閱讀整個消息。如果您的接收緩衝區沒有足夠的空間來存儲接收到的數據,則簡單地放棄溢出。

當對消息隊列或管道進行接收時,始終確保將緩衝區設置爲隊列元素的最大大小。

相關問題