kmsgsnd-Kernel-Service
Zweck
Sendet eine Nachricht unter Verwendung einer zuvor definierten Nachrichtenwarteschlange
Syntax
Parameter
| Element | Beschreibung |
|---|---|
| msqid | Gibt die ID der Nachrichtenwarteschlange an, die angibt, an welche Nachrichtenwarteschlange die Nachricht gesendet werden soll. |
| Nachricht | Zeigt auf eine msgbuf-Struktur, die die Nachricht enthält. Die Struktur msgbuf ist in der Datei /usr/include/sys/msg.h definiert. |
| Msgsz | Gibt die Größe der zu sendenden Nachricht in Byte an. Der Parameter Msgsz kann im Bereich von 0 bis zu einem vom System festgelegten Maximum liegen. |
| Nachrichtenflg | Gibt die Aktion an, die ausgeführt werden soll, wenn die Nachricht aus mehreren Gründen nicht gesendet werden kann. |
Beschreibung
Der Kernel-Dienst kmsgsnd sendet eine Nachricht an die durch den Parameter msqid angegebene Warteschlange. Der Kernel-Dienst kmsgsnd bietet für Benutzermodus-Prozesse im Kernel-Modus die gleichen Funktionen wie das Unterprogramm msgsnd für Kernel-Prozesse oder Benutzermodus-Prozesse im Benutzermodus. Der kmsgsnd-Dienst kann von einem Benutzermodusprozess im Kernelmodus oder von einem Kernelprozess aufgerufen werden. Ein Kernelprozess kann auch das Unterprogramm msgsnd aufrufen, um die gleiche Funktion zu erfüllen.
Es gibt zwei Gründe, warum der Kernel-Dienst kmsgsnd die Nachricht nicht senden kann:
- Die Anzahl der Bytes, die sich bereits in der Warteschlange befinden, entspricht dem Mitglied msg_qbytes.
- Die Gesamtzahl der Nachrichten in allen Warteschlangen des Systems entspricht einem vom System festgelegten Grenzwert.
Wenn der Kernel-Dienst kmsgsnd die Nachricht nicht senden kann, gibt es mehrere Möglichkeiten:
- Wenn der msgflg-Parameter auf IPC_NOWAIT gesetzt ist, wird die Nachricht nicht gesendet, und der kmsgsnd-Dienst schlägt fehl und gibt einen EAGAIN-Wert zurück.
- Ist der Parameter msgflg gleich 0, so unterbricht der aufrufende Prozess die Ausführung, bis eine der folgenden Bedingungen eintritt:
- Die für die Aussetzung verantwortliche Bedingung besteht nicht mehr; in diesem Fall wird die Meldung gesendet.
- Die durch den Parameter msqid angegebene ID der Nachrichtenwarteschlange wird aus dem System entfernt. In diesem Fall schlägt der kmsgsnd-Dienst fehl und es wird ein EIDRM-Wert zurückgegeben.
- Der aufrufende Prozess empfängt ein Signal, das abgefangen werden soll. In diesem Fall wird die Nachricht nicht gesendet, und der aufrufende Prozess setzt die Ausführung wie im Kernel-Dienst sigaction beschrieben fort.
Ausführungsumgebung
Der Kernel-Dienst kmsgsnd kann nur aus der Prozessumgebung aufgerufen werden.
Der aufrufende Prozess muss Schreibrechte haben, um die Operation kmsgsnd ausführen zu können.
Rückgabewerte
| Element | Beschreibung |
|---|---|
| 0 | Zeigt eine erfolgreiche Operation an. |
| EINVAL | Gibt an, dass der Parameter Nachrichten-ID keine gültige Nachrichtenwarteschlangen-ID ist |
| EACCES | Gibt an, dass dem aufrufenden Prozess die Operationsberechtigung verweigert wird. |
| EAGAIN | Zeigt an, dass die Nachricht aus einem der zuvor genannten Gründe nicht gesendet werden kann, und der Parameter msgflg ist auf IPC_NOWAIT gesetzt. |
| EINVAL | Gibt an, dass der Parameter Msgsz kleiner als 0 oder größer als der vom System festgelegte Grenzwert ist. |
| EINTR | Zeigt an, dass der kmsgsnd-Dienst ein Signal empfangen hat. |
| EIDRM | Gibt an, dass die im Parameter Nachrichten-ID angegebene Nachrichtenwarteschlangen-ID aus dem System entfernt wurde. |
| ENOMEM | Gibt an, dass das System nicht über genügend Speicher zum Senden der Nachricht verfügt. |