coda di messaggi IPC. chiamata di sistema msgrcv. System V. come uscire di ciclo
-
18-09-2019 - |
Domanda
Ho una coda di messaggi da cui sto ottenendo i messaggi in un ciclo. Il problema è che io non so come uscire dal loop. msgrcv restituisce il tipo size_t quindi continua ad andare. Quale valore devo confrontare il valore di ritorno in modo da poter uscire dal ciclo?
while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){
printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3);
Soluzione
Perché il vostro ultimo parametro non include IPC_NOWAIT
, blocchi msgrcv
in attesa per i messaggi futuri.
Se non ci sono messaggi da leggere immediatamente, msgrcv(..., ... | IPC_NOWAIT)
tornerà (size_t)-1
e impostare errno = ENOMSG
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow