문제

루프에서 메시지를받는 메시지 대기열이 있습니다. 문제는 루프를 종료하는 방법을 모른다는 것입니다. msgrcv는 유형 size_t를 반환하여 계속 진행합니다. 루프를 종료 할 수 있도록 반환 값을 비교 해야하는 값은 무엇입니까?

while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){
    printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3);
도움이 되었습니까?

해결책

마지막 매개 변수에는 포함되지 않기 때문입니다 IPC_NOWAIT, msgrcv 향후 메시지를 기다리는 동안 차단됩니다.

즉시 읽을 메시지가 없으면 msgrcv(..., ... | IPC_NOWAIT) 돌아올 것입니다 (size_t)-1 그리고 설정 errno = ENOMSG.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top