2008-09-22 3 views
0

두 개의 vxWorks 작업간에 정보를 전송하기 위해 파이프를 사용하고 있습니다. 우리는 더 이상 MAX_RX_LEN보다 메시지를 보낼 경우 (예 : txLen> MAX_RX_LEN은) 우리가이 메시지의 나머지를 얻기 위해 읽는vxWorks 파이프를 사용할 때 왜 데이터가 손실됩니까?


Init() 
{ 
    fd = open("/pipe/mydev", O_RDWR, 0777); 
... 
} 

taskRx() 
{ 
    ... 
    len = read(fd, rxbuf, MAX_RX_LEN); 
    ... 
} 
taskTx() 
{ 
    ... 
    len = write(fd, txbuf, txLen); 
    ... 
} 

: 여기

은 코드 샘플입니다.

우리가 알아챈 것은 두 번째 읽기가 데이터를받지 못했다는 것입니다.

왜 그럴까요?

답변

2

VxWorks의 파이프 메커니즘은 이 아니며 스트림 기반입니다 (유닉스 명명 된 파이프와 달리).

vxWorks 메시지 대기열 기능 위에있는 계층입니다. 따라서 메시지 대기열과 동일한 제한 사항이 있습니다. 파이프에서 읽는 경우 전체 메시지를 실제로 읽는 것입니다. 수신 버퍼에 수신 된 데이터를 저장할 공간이 충분하지 않으면 단순히 오버플로가 삭제됩니다.

메시지 큐 또는 파이프에서 수신을 수행 할 때 항상 버퍼가 큐 요소의 최대 크기로 설정되어 있는지 확인하십시오.

관련 문제