Scroll to navigation

SVIPC(7) Linux-Programmierhandbuch SVIPC(7)

BEZEICHNUNG

svipc - System-V-Mechanismen für Interprozesskommunikation

ÜBERSICHT

#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>

BESCHREIBUNG

Diese Handbuchseite bezieht sich auf die Linux-Implementierung der System-V-Mechanismen für Interprozesskommunikation: Nachrichten-Warteschlangen (Message Queues), Sätze von Semaphoren (Semaphore Sets) und gemeinsam genutzte Speichersegmente (Shared Memory Segments). Im Folgenden bedeutet das Wort Ressource eine konkrete Umsetzung (Instantiation) eines dieser Mechanismen.

Ressourcen-Zugriffsrechte

Für jede Ressource verwaltet das System in einer allgemeinen Struktur des Typs struct ipc_perm die Informationen, die zur Bestimmung der Rechte für eine IPC-Operation notwendig sind. Die Struktur ipc_perm enthält die folgenden Elemente:
struct ipc_perm {
    uid_t          cuid;   /* Benutzer-ID des Urhebers */
    gid_t          cgid;   /* Gruppen-ID des Urhebers */
    uid_t          uid;    /* Benutzer-ID des Berechtigten */
    gid_t          gid;    /* Gruppen-ID des Berechtigten */
    unsigned short mode;   /* Lese- und Schreibrechte */
};

Die 9 niedrigstwertigen Bits des Elements mode der Struktur ipc_perm legen die Zugriffsrechte auf die Ressource für Prozesse fest, die einen IPC-Systemaufruf ausführen. Die Rechte werden wie folgt interpretiert:

    0400    Eigentümer darf lesen
    0200    Eigentümer darf schreiben

    0040    Gruppe darf lesen
    0020    Gruppe darf schreiben

    0004    Andere dürfen lesen
    0002    Andere dürfen schreiben

Die Bits 0100, 0010 und 0001 (die Ausführungsbits) werden nicht vom System benutzt. Darüber hinaus bedeutet »schreiben« für Sätze von Semaphoren tatsächlich »verändern«.

Dieselbe System-Header-Datei definiert auch die folgenden symbolischen Konstanten:

IPC_CREAT
Eintrag erzeugen, wenn Schlüssel nicht vorhanden.
IPC_EXCL
Misserfolg, wenn Schlüssel vorhanden.
IPC_NOWAIT
Fehler, wenn die Anforderung warten muss.
IPC_PRIVATE
privater Schlüssel
IPC_RMID
Ressource entfernen
IPC_SET
Optionen für Ressourcen setzen
IPC_STAT
Optionen für Ressourcen feststellen

Beachten Sie, dass IPC_PRIVATE vom Typ key_t ist. Alle anderen symbolischen Konstanten sind Felder von Schaltern (Flags), für die eine ODER-Verknüpfung mit einer int-Variablen als Ergebnis möglich ist.

Nachrichten-Warteschlangen (Message queues)

Eine Nachrichten-Warteschlange (im Folgenden kurz Queue) wird eindeutig über ihre msqid (einen positiven Integer) identifiziert und ist mit einer Datenstruktur des Typs struct msquid_ds verbunden. Die Struktur wird in <sys/msg.h> definiert und besteht aus den folgenden Elementen:
struct msqid_ds {
    struct ipc_perm msg_perm;
    msgqnum_t       msg_qnum;    /* Anzahl der Nachrichten in */
                                 /* der Queue */
    msglen_t        msg_qbytes;  /* maximale Nachrichtenlänge */
                                 /* für die Queue */
    pid_t           msg_lspid;   /* PID des letzten Aufrufs von */
                                 /* msgsnd(2) */
    pid_t           msg_lrpid;   /* PID des letzten Aufrufs von */
                                 /* msgrcv(2)-Aufrufs */
    time_t          msg_stime;   /* Zeitpunkt des letzten
                                 /* msgsnd(2)-Aufrufs */
    time_t          msg_rtime;   /* Zeitpunkt des letzten
                                 /* msgrcv(2)-Aufrufs */
    time_t          msg_ctime;   /* Zeitpunkt der letzten */
                                 /* Änderung */
};

msg_perm
Die Struktur ipc_perm legt die Zugriffsrechte auf die Queue fest.
msg_qnum
aktuelle Anzahl der Nachrichten in der Queue
msg_qbytes
größte erlaubte Nachrichtenlänge in Byte für die Queue
msg_lspid
ID des Prozesses, der als letzter msgsnd(2) aufgerufen hat.
msg_lrpid
ID des Prozesses, der als letzter msgrcv(2) aufgerufen hat.
msg_stime
Zeitpunkt des letzten Aufrufs von msgsnd(2)
msg_rtime
Zeitpunkt des letzten Aufrufs von msgcv(2)
msg_ctime
Zeitpunkt des letzten Systemaufrufs, bei dem ein Element von msqid_ds geändert wurde.

Semaphoren-Gruppen (Semaphore Sets)

Ein Gruppe von Semaphoren wird eindeutig durch seine semid (einen positiven Integer) identifiziert und ist mit einer Datenstruktur des Typs struct semid_ds verbunden. Die Struktur wird in <sys/sem.h> definiert und enthält die folgenden Elemente:
struct semid_ds {
    struct ipc_perm sem_perm;
    time_t          sem_otime; /* Zeitpunkt des letzten Aufrufs */
                               /* von semop */
    time_t          sem_ctime; /* Zeitpunkt des letzten Aufrufs */
                               /* von semctl */
    unsigned long   sem_nsems; /* Anzahl der Semaphoren in der Gruppe */
};

sem_perm
Die Struktur ipc_perm legt die die Zugriffsrechte für die Semaphoren-Gruppe fest.
sem_otime
Zeitpunkt des letzten Aufrufs von semop(2)
sem_ctime
Zeitpunkt des letzten Aufrufs von semctl(2), der einen Eintrag der oben genannten Struktur oder einen zur Gruppe gehörenden Semaphor geändert hat.
sem_nsems
Anzahl der Semaphoren in der Gruppe. Jeder Semaphor der Gruppe wird repräsentiert durch einen nicht negativen Integerwert zwischen 0 und sem_nsems-1.

Ein Semaphor ist eine Datenstruktur des Typs struct sem mit folgenden Elementen:

struct sem {
    int semval;  /* Wert des Semaphors */
    int sempid;  /* PID des Prozesses, der zuletzt veränderte */
};

semval
Wert des Semaphors: eine nicht negative ganze Zahl (nonnegative integer)
sempid
PID des letzten Prozesses, der den Wert dieser Semaphore veränderte.

Gemeinsame Speichersegmente

Ein gemeinsames Speichersegment wird eindeutig durch seine shmid (einen positiven Integer) identifiziert und ist mit einer Datenstruktur des Typs struct shmid_ds verbunden. Die Struktur wird in <sys/shm.h> definiert und enthält die folgenden Elemente:
struct shmid_ds {
    struct ipc_perm shm_perm;
    size_t          shm_segsz;   /* Segmentgröße */
    pid_t           shm_cpid;    /* PID des Erzeugers */
    pid_t           shm_lpid;    /* PID der letzten Operation */
    shmatt_t        shm_nattch;  /* Anzahl der zugreifenden */
                                 /* Prozesse */
    time_t          shm_atime;   /* Zeitpunkt der letzten */
                                 /* Ankopplung */
    time_t          shm_dtime;   /* Zeitpunkt der letzten */
                                 /* Trennung */
    time_t          shm_ctime;   /* Zeitpunkt der letzten */
                                 /* Änderung */
};

shm_perm
Struktur des Typs ipc_perm für die Festlegung der Zugriffsrechte auf das gemeinsame Speichersegment.
shm_segsz
Größe des gemeinsamen Speichersegments in Byte
shm_cpid
ID des Prozesses, der das gemeinsame Speichersegment eingerichtet hat.
shm_lpid
ID des letzten Prozesses, der shmat(2) oder shmdt(2) aufgerufen hat.
shm_nattch
Anzahl von Prozessen (Attaches), die derzeit mit diesem gemeinsamen Speichersegment arbeiten.
shm_atime
Zeitpunkt des letzten Aufrufs von shmat(2)
shm_dtime
Zeitpunkt des letzten Aufrufs von shmdt(2)
shm_ctime
Zeitpunkt des letzten Aufrufs von shmctl(2), der shmid_ds verändert hat.

IPC-Namensräume

Für eine Diskussion der Interaktion von System-V-IPC-Objekten und IPC-Namensräumen lesen Sie namespaces(7).

SIEHE AUCH

ipcmk(1), ipcrm(1), ipcs(1), lsipc(1), ipc(2), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3), namespaces(7)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.09 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Mike Fengler <mike@krt3.krt-soft.de> und Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.

15. März 2016 Linux