IPC-Nachrichtenwarteschlange. msgrcv Systemaufruf. System V, wie aus Schleife erhalten
-
18-09-2019 - |
Frage
Ich habe eine Nachrichtenwarteschlange, von dem mir Nachrichten in einer Schleife immer bin. Das Problem ist, dass ich weiß nicht, wie die Schleife zu verlassen. msgrcv kehrt Typ size_t so es geht immer wieder. Welcher Wert soll ich den Rückgabewert zu vergleichen, so kann ich die Schleife verlassen?
while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){
printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3);
Lösung
Weil Ihr letzter Parameter nicht enthält IPC_NOWAIT
, msgrcv
Blöcke während für zukünftige Nachrichten zu warten.
Wenn Sie keine Meldung sofort zu lesen, msgrcv(..., ... | IPC_NOWAIT)
kehrt (size_t)-1
und setzen errno = ENOMSG
.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow