Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

shmget - gemeinsam nutzbaren Speicherbereich anlegen

&pagelevel(4)&pagelevel

Definition

#include <sys/shm.h>

int shmget(key_t key, int size, int shmflg);

Beschreibung

shmget() liefert die key zugeordnete Kennzahl für gemeinsam nutzbaren Speicherbereich.

Es wird eine Kennzahl für gemeinsam nutzbaren Speicherbereich mit dazugehöriger Datenstruktur und das dazugehörige Speichersegment in einer Größe von mindestens size Bytes (siehe sys/shm.h) für key eingerichtet, wenn eine der folgenden Bedingungen zutrifft:

  • Das Argument key hat den Wert IPC_PRIVATE.

  • Das Argument key besitzt noch keine ihm zugeordnete Kennzahl für gemeinsam nutzbaren Speicherbereich und (shmflg & IPC_CREAT) ist ungleich 0.

Beim Einrichten der neuen Kennzahl für gemeinsam nutzbaren Speicherbereich wird die dazugehörige Datenstruktur wie folgt initialisiert:

  • Die Werte von shm_perm.cuid, shm_perm.uid, shm_perm.cgid und shm_perm.gid werden gleich der effektiven Benutzer- bzw. Gruppennummer des aufrufenden Prozesses gesetzt.

  • Die 9 niederwertigen Bits von shm_perm.mode werden gleich den 9 niederwertigen Bits von shmflg gesetzt. Das Argument shm_segsz wird auf den Wert von size gesetzt.

  • Die Werte von shm_lpid, shm_nattch, shm_atime und shm_dtime werden auf 0 gesetzt.

  • Für shm_ctime wird die aktuelle Zeit eingetragen.

Returnwert

Kennzahl für gemeinsam nutzbaren Speicherbereich



bei Erfolg. Die Kennzahl ist eine nichtnegative ganze Zahl.

 

-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

shmget() schlägt fehl, wenn gilt:

 

EACCES

Es existiert eine Kennzahl für gemeinsam nutzbaren Speicherbereich für das Argument key, aber die in den 9 niederwertigen Bits von shmflg angegebene Berechtigung wurde nicht erteilt.

 

EEXIST

Für key existiert eine Kennzahl für gemeinsam nutzbaren Speicherbereich, aber ((shmflg & IPC_CREAT) && (shmflg & IPC_EXCL)) ist ungleich 0.


EINVAL

Der Wert von size ist kleiner als der systemspezifische Minimalwert oder größer als der systemspezifische Maximalwert,
oder für key existiert bereits eine Kennzahl für gemeinsam nutzbaren Speicherbereich, aber die Größe des ihr zugeordneten Segments ist kleiner als size und size ist ungleich 0.


ENOENT

Für key existiert keine Kennzahl für gemeinsam nutzbaren Speicherbereich und (shmflg & IPC_CREAT) ist gleich 0.


ENOMEM

Der vorhandene physikalische Speicherplatz würde überschritten werden.


ENOSPC

Der systemspezifische Maximalwert für Kennzahlen für gemeinsam nutzbaren Speicherbereich würde überschritten.

Hinweis

BS2000

Es wird nicht verhindert, dass eine Task, die nur Leserecht hat, mit BS2000-Mitteln auch schreibend auf den gemeinsam nutzbaren Speicherbereich zugreift. (Ende)

Siehe auch

shmat(), shmctl(), shmdt(), sys/shm.h, Abschnitt "Interprozesskommunikation“.