Ich möchte wissen, ob eine Warteschlangennachricht leer ist oder nicht. Ich habe msg_ctl() wie folgt verwendet es nicht funktioniert:Linux: Überprüfen Sie, ob die Nachrichtenwarteschlange leer ist
struct msqid_ds buf;
int num_messages;
rc = msgctl(msqid, IPC_STAT, &buf);
und ich habe diese Peek-Funktion verwendet:
int peek_message(int qid, long type)
{
int result, length;
if((result = msgrcv(qid, NULL, 0, type, IPC_NOWAIT)) == -1) {
if(errno==E2BIG)
return(1);
}
return(0);
}
in beiden Fällen i das gleiche Ergebnis vor und nach einem Senden Nachricht an die Warteschlange.
Die Nachricht wird erfolgreich in die Warteschlange gestellt, ich habe das getestet, indem ich gelesen habe, was ich gesendet habe.
"es funktioniert nicht"? - was tut es? Erhalten Sie eine Fehlermeldung? Gibt es einen unerwarteten Wert zurück? Welcher Wert? – sehe
ich meine, ich bekomme eine Zählung von 0 Nachrichten –
Und in erster Linie überprüfen Sie buf.msg_qnum? Das ist nicht klar, da Sie auch eine unerklärliche "int num_messages" haben. – Duck