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_perm | shm_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_perm | msg_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 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_t | mq_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 |