B.11 Sys-V-Interprozesskommnunikationen
Die drei Interprozesskommunikations-Techniken (Semaphor, Message Queue und Shared Memory) von System V nutzen zwar unterschiedliche Konzepte, verwenden allerdings alle drei dieselben systemweiten Ressourcen, welche von mehreren Prozessen gemeinsam genutzt werden können. Somit ist hiermit eine Kommunikation zwischen nichtverwandten Prozessen möglich. Mehr zu den allgemeinen Gemeinsamkeiten entnehmen Sie bitte aus dem entsprechenden Kapitel zur Sys-V-Interprozesskommunikation.
B.11.1 Message Queue
Eine Message Queue setzt sich aus den folgenden drei Teilen zusammen:
|
Message-Typ (long) |
|
Größe in Bytes des Message (size_t) |
|
der eigentlichen Message (Message-String) |
Zur Verwendung der Funktionen einer Message Queue werden die Headerdateien <sys/types.h>, <sys/ipc.h> und <sys/msg.h> benötigt.
Tabelle B.57
Funktionen für Message Queues
Syntax
|
Bedeutung
|
int msgget( key_t key,
int msgflg);
|
Message Queue öffnen oder erzeugen
|
int msgsnd( int msqid,
struct msgbuf *msgp,
size_t msgsz,
int msgflg);
|
Nachrichten senden
|
ssize_t msgrcv(
int msqid,
struct msgbuf *msgp,
size_t msgsz,
long msgtyp,
int msgflg);
|
Nachrichten empfangen
|
int msgctl(
int msqid,
int cmd,
struct msqid_ds *buf);
|
Status einer Message Queue ändern oder abfragen
|
B.11.2 Semaphor
Das Semaphor ist eine Variable vom Typ unsigned short, welche beim Eintritt in einen kritischen Codeausschnitt dekrementiert und beim Verlassen wieder inkrementiert wird. Zur Verwendung der Funktionen der Semaphore werden die Headerdateien <sys/types.h>, <sys/ipc.h> und <sys/sem.h> benötigt.
Tabelle B.58
Funktionen für Semaphore
Syntax
|
Bedeutung
|
int semget( key_t key,
int nsems,
int semflg);
|
Semaphor öffnen oder erzeugen
|
int semctl( int semid,
int semnum,
int cmd, ...);
|
Status einer Semaphor-Menge abfragen/setzen oder löschen
|
int semop( int semid,
struct sembuf *sops,
unsigned nsops);
|
Ausführen von Operationen auf Semaphor-Menge
|
B.11.3 Shared Memory
Beim Shared Memory verwenden mehrere Prozesse einen bestimmten Speicherbereich gemeinsam. Somit ist ein aufwendiges Kopieren zwischen den Prozessen nicht mehr nötig, da jeder Prozess über denselben Inhalt verfügen kann, der sich in diesem Speicherbereich befindet. Wichtig dabei ist, dass niemals zwei Prozesse gleichzeitig in diesen Speicherbereich schreiben. Diese Synchronisation lässt sich am einfachsten mit dem Client/Server-Prinzip realisieren. Zur Verwendung der Funktionen von Shared Memory werden die Headerdateien <sys/types.h>, <sys/ipc.h> und <sys/shm.h> benötigt.
Tabelle B.59
Funktionen für Shared Memories
Syntax
|
Bedeutung
|
int shmget( key_t key,
int size,
int shmflg);
|
Shared Memory öffnen oder erzeugen
|
int shmctl(
int shmid,
int cmd,
struct shmid_ds *buf);
|
Status eines Shared Memorys abfragen/setzen oder löschen
|
void *shmat(
int shmid,
const void *shmaddr,
int shmflg);
|
Shared Memory Segment an einen Prozess binden
|
int shmdt(const void *shmaddr);
|
Shared Memory Segment von einem Prozess lösen
|
|