IPC 메시지 대기열. MSGRCV 시스템 호출. 시스템 V. 루프에서 벗어나는 방법
-
18-09-2019 - |
문제
루프에서 메시지를받는 메시지 대기열이 있습니다. 문제는 루프를 종료하는 방법을 모른다는 것입니다. 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
.
제휴하지 않습니다 StackOverflow