2009-11-05 6 views
0

루프에서 메시지를 가져 오는 메시지 큐가 있습니다. 문제는 루프를 종료하는 방법을 모른다는 것입니다. msgrcv는 size_t 유형을 반환하므로 계속 진행됩니다. 루프를 종료 할 수 있도록 반환 값을 어떤 값으로 비교해야합니까?IPC 메시지 대기열. msgrcv 시스템 호출. System V. 루프를 벗어나는 방법

while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){ 
    printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3); 

답변

1

미래의 메시지를 기다리는 동안 당신의 마지막 매개 변수는 IPC_NOWAIT, msgrcv 블록을 포함하지 않기 때문에.

즉시 읽을 메시지가 없으면 msgrcv(..., ... | IPC_NOWAIT)(size_t)-1을 반환하고 errno = ENOMSG을 설정합니다.