msgxrcv (Subroutine)
Zweck
Empfängt eine erweiterte Nachricht.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
#include <sys/msg.h>
int msgxrcv (MessageQueueID, MessagePointer, MessageSize, MessageType, MessageFlag) int MessageQueueID, MessageFlag; size_t MessageSize; struct msgxbuf * MessagePointer; long MessageType;
Beschreibung
Das Unterprogramm msgxrcv liest eine Nachricht aus der durch den Parameter MessageQueueID angegebenen Warteschlange und speichert sie in dem erweiterten Nachrichtenempfangspuffer, auf den der Parameter MessagePointer zeigt. Der aktuelle Prozess muss Leseberechtigung haben, um diese Operation ausführen zu können. Die Struktur msgxbuf ist in der Datei sys/msg.h definiert.
Für die Nachrichtenwarteschlange gelten folgende Grenzwerte:
- Die maximale Nachrichtengröße beträgt 4 Megabyte.
- Die maximale Anzahl Nachrichten pro Warteschlange beträgt 8192.
- Die maximale Anzahl von Nachrichtenwarteschlangen-IDs ist 131072.
- Die maximale Anzahl von Bytes in einer Warteschlange beträgt 4 Megabyte.
Parameter
| Element | Beschreibung |
|---|---|
| MessageQueueID | Gibt die ID der Nachrichtenwarteschlange an. |
| MessagePointer | Gibt einen Zeiger auf einen erweiterten Nachrichtenempfangspuffer an, in dem eine Nachricht gespeichert wird |
| MessageSize | Gibt die Größe desmtextFeld in Byte. Die empfangene Nachricht wird auf die mit dem Parameter MessageSize angegebene Größe abgeschnitten, wenn sie größer als der Parameter MessageSize ist und der Wert für MSG_NOERROR auf 'true' gesetzt ist. Der abgeschnittene Teil der Nachricht geht verloren und dem aufrufenden Prozess wird kein Hinweis auf das Abschneiden gegeben. Wenn die Nachricht länger als die durch den Parameter MessageSize angegebene Anzahl Byte ist und der Wert MSG_NOERROR nicht festgelegt ist, ist die Subroutine msgxrcv nicht erfolgreich und setzt die globale Variable errno auf den Fehlercode E2BIG . |
| MessageType | Gibt den Typ der angeforderten Nachricht wie folgt an:
|
| MessageFlag | Gibt den Wert 0 oder einen Wert an, der durch logisches ODER mit einem oder mehreren der folgenden Werte erstellt wurde:
|
Rückgabewerte
Nach erfolgreichem Abschluss gibt die Subroutine msgxrcv einen Wert zurück, der der Anzahl der tatsächlich in dermtextund die folgenden Aktionen werden in Bezug auf die mit dem Parameter MessageQueueID verbundene Datenstruktur durchgeführt:
- Dermsg_qnumwird um 1 verringert.
- Dermsg_lrpidFeld wird auf die Prozess-ID des aufrufenden Prozesses gesetzt.
- Dermsg_rtimeFeld wird auf die aktuelle Uhrzeit gesetzt.
Wenn das Unterprogramm msgxrcv nicht erfolgreich ist, wird ein Wert von -1 zurückgegeben und die globale Variable errno gesetzt, um den Fehler anzuzeigen.
Fehlercodes
Die Subroutine msgxrcv ist nicht erfolgreich, wenn eine der folgenden Bedingungen zutrifft:
| Element | Beschreibung |
|---|---|
| EINVAL | Der Parameter MessageQueueID ist kein gültiger Bezeichner für die Nachrichtenwarteschlange. |
| EACCES | Dem aufrufenden Prozess wird die Berechtigung für die angegebene Operation verweigert. |
| EINVAL | Der Parameter MessageSize ist kleiner als 0. |
| E2BIG | Dermtextist größer als der Wert des Parameters MessageSize und der Wert MSG_NOERROR ist nicht festgelegt. |
| ENOMSG | Die Warteschlange enthält keine Nachricht des gewünschten Typs und der Wert IPC_NOWAIT wird festgelegt. |
| EFAULT | Der Parameter MessagePointer verweist außerhalb des Prozessadressraums. |
| EINTR | Die Subroutine msgxrcv wurde durch ein Signal unterbrochen. |
| EIDRM | Die durch den Parameter MessageQueueID angegebene Kennung der Nachrichtenwarteschlange wird aus dem System entfernt. |