1. Index
  2. Shell
  3. C
  4. POSIX
  5. JavaScript

Interprozesskommunikation

Mechanismus System V POSIX Beschreibung
Shared Memory sys/shm.h sys/mman.h Geminsam verwendeter Speicher
Semaphore sys/sem.h semaphore.h Wechselseitiger Ausschluß
Message Queues sys/msg.h mqueue.h Zuverlässigen Weitergabe von Nachrichten

sys/ipc.h

Allen System V Mechanismen gemein sind folgende Strukturen und Konstanten:

struct ipc_perm
key_t __key Schlüssel für {sem|msg|shm}get
uid_t uid Eigentümer
gid_t gid Eigentümergruppe
uid_t cuid Erzeuger
gid_t cgid Erzeugergruppe
unsigned short mode Zugriffsrechte
unsigned short __seq Fortlaufende Nummer
key_t ftok (const char * path, int salt) Hashwert aus Pfad ableiten
IPC_PRIVATE Schlüssel für neue Warteschlange.
IPC_CREAT Erzeugt nötigenfalls ein neues Objekt.
IPC_EXCL Generiert Fehler falls das Objekt bereits existiert.
IPC_STAT Liest Status des Objekts in die entsprechende _ds-Struktur aus.
IPC_SET Ändert Besitz- und Zugriffsrechte des Objekts entsprechend der _ds-Struktur.
IPC_RMID Entfernt das Objekt.

sys/shm.h

System V Shared Memory

struct shmid_ds
struct ipc_permshm_perm Zugriffsrechte
size_t shm_segsz Größe in Oktetten
time_t shm_atime Einblenden
time_t shm_dtime Ausblenden
time_t shm_ctime Änderung
pid_t shm_cpid Erzeuger
pid_t shm_lpid Einblender
shmatt_t shm_nattch Anzahl
int shmget (key_t key, size_t size, int flags) Erzeugen
int shmctl (int id, int cmd, struct shmid_ds * buf) Ändern
void * shmat (int id, const void * addr, int shmflg) Einblenden
int shmdt ( const void * addr) Ausblenden
SHM_RND Rundet die Adresse auf das nächste Vielfache von SHMLBA. Andernfalls muss die Adresse ein vielfaches der Seitengröße sein.
SHM_RDONLY Bestraft schreibende Zugriff mit einem Segmentierungsfehler (SIGSEGV).

sys/sem.h

System V Semaphore

struct semid_ds
struct ipc_perm sem_perm
time_t sem_otime
time_t sem_ctime
unsigned short sem_nsems
int semget (key_t key, int nsems, int flags)
union semun
int val SETVAL
struct semid_ds * buf IPC_{STAT,SET}
unsigned short * array {GET,SET}ALL
int semctl (int semid, int semnum, int cmd, ...)
struct sembuf
unsigned short sem_num Index
short sem_op -1, 0, 1
short sem_flg
int semop (int semid, struct sembuf * sops, unsigned nsops)
int semtimedop (int semid, struct sembuf * sops, unsigned nsops,
struct timespec * timeout)
SEM_UNDO Bricht die Operation ab, falls der Prozesss endet.
IPC_NOWAIT Setzt errno auf EAGAIN statt zu blockieren.
GETALL Liefert den aktuellen Wert aller Semaphore im Satz
SETALL Setzt den Wert aller Semaphore und weckt alle wartenden Prozesse.
GETVAL Liefert den Wert eines bestimmte Semaphors.
SETVAL Setzt den Wert des semnum-ten Semaphors und weckt alle wartenden Prozesse.
GETNCNT Liefert die Anzahl der Prozesse, die am semnum-ten Semaphor auf Nicht-Null warten.
GETZCNT Liefert die Anzahl der Prozesse, die am semnum-ten Semaphor auf Null warten.
GETPID Liefert die Prozessnummer des zuletzt auf einem Semaphor operierenden Prozesses.

sys/msg.h

System V Message Queues

struct msqid_ds
struct ipc_permmsg_perm Zugriffsrechte
time_t msg_stime Sendezeit
time_t msg_rtime Empfangszeit
time_t msg_ctime Änderungszeit
msgqnum_t msg_qnum Nachrichten
msglen_t msg_qbytes Kapazität
pid_t msg_lspid Sender
pid_t msg_lrpid Empfänger
int msgget (key_t key, int flags) Erzeugen
int msgctl (int id, int cmd, struct msqid_ds * buf) Ändern
int msgsnd (int id, void * msg, size_t len, int msgflg)
int msgrcv (int id, void * msg, size_t len, long int type, int msgflg)
MSG_EXCEPT Liest immer die erste Nachricht.
MSG_NOERROR Schneidet lange Nachrichten ab.
IPC_NOWAIT Setzt errno auf EAGAIN statt zu blockieren.

POSIX

POSIX definiert eine auf Dateideskriptoren basierende Schnittstelle für die Interprozesskommunikation.

sys/mman.h

Die Echtzeit-Erweiterungen erlauben es, Datei-Deskriptoren für die Verwendung mit mmap zu öffnen.

int shm_open (const char * name, int oflag, mode_t mode)
int shm_unlink (const char * name)
O_RDONLY Nur Lesen
O_WRONLY Nur Schreiben
O_RDWR Beides

semaphore.h

sem_t *sem_open (const char * name, int oflag, mode_t mode) Erzeugen
int sem_unlink (const char * name) Löschen
int sem_close (sem_t * sem) Schließen
int sem_destroy (sem_t * sem) Invalidieren
int sem_getvalue (sem_t * sem, int * sval) Abfragem
int sem_init (sem_t * sem, int pshared, unsigned value) Initialisieren
int sem_post (sem_t * sem) Inkrementieren
int sem_wait (sem_t * sem) Blockieren
int sem_trywait (sem_t * sem) …mit EAGAIN
int sem_timedwait (sem_t * sem, const struct timespec * timeout) …und Wartezeit
S_IRWXU 00700: Besitzer bekommt alle Rechte.
S_IRUSR 00400: Besitzer bekommt Leserechte.
S_IWUSR 00200: Besitzer bekommt Schreibrechte.
S_IXUSR 00100: Besitzer bekommt Ausführrechte.
S_IRWXG 00070: Gruppe bekommt alle Rechte.
S_IRGRP 00040: Gruppe bekommt Leserechte.
S_IWGRP 00020: Gruppe bekommt Schreibrechte.
S_IXGRP 00010: Gruppe bekommt Ausführrechte.
S_IRWXO 00007: Andere bekommen alle Rechte.
S_IROTH 00004: Andere bekommen Leserechte.
S_IWOTH 00002: Andere bekommne Schreibrechte.
S_IXOTH 00001: Andere bekommen Ausführrechte.
0 für Threads innerhalb des Prozesses
!0 für mehrere Prozesse
time_t tv_sec Sekunden
long int tv_nsec Nanosekunden

mqueue.h

Weder Linux noch Solaris unterstützen POSIX Message Queues, aber immerhin AIX.

mqd_tmq_open (const char * name, int oflag, mode_t mode) Erzeugen
int mq_unlink (const char * name) Löschen
int mq_close (mqd_t queue) Schließen
struct mq_attr
long mq_flags Optionen
long mq_maxmsg Obergrenze
long mq_msgsize Größe
long mq_curmsgs Anzahl
int mq_getattr (mqd_t queue, struct mq_attr * attr)
int mq_setattr (mqd_t queue, const struct mq_attr * attr, struct mq_attr * oldattr)
int mq_notify (mqd_t queue, const struct sigevent * event)
int mq_send (mqd_t queue, const char * buf, size_t len, unsigned priority)
ssize_t mq_receive (mqd_t queue, char * buf, size_t len, unsigned * priority)
int mq_timedsend (mqd_t queue, const char * buf, size_t len, unsigned priority, const struct timespec * timeout)
ssize_t mq_timedreceive(mqd_t queue, char * buf, size_t len, unsigned * priority, const struct timespec * timeout)
struct sigevent
int sigev_notify Methode zur Benachrichtigung
int sigev_signo Signalnummer
union sigval sigev_value Zusätzliche Daten
void (* sigev_notify_function) (union sigval) Thread-Funktion
void * sigev_notify_attributes Attribute für Threads
pid_t sigev_notify_thread_id Threadnummer
union sigval
int sival_int Zahlenwert
void * sival_ptr Zeiger