Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       shmget - ein gemeinsames Speichersegment reservieren

ÜBERSICHT

       #include <sys/ipc.h>
       #include <sys/shm.h>

       int shmget(key_t schluessel, size_t groesse, int shmflg);

BESCHREIBUNG

       shmget()  gibt  den Bezeichner des gemeinsamen Speichersegments zurück,
       der mit dem Wert des Arguments schluessel verknüpft ist.  Es  wird  ein
       neues  gemeinsames  Speichersegment  erstellt, dessen Größe dem auf ein
       Vielfaches von PAGE_SIZE gerundeten Wert von groesse entspricht,  falls
       schluessel  den  Wert  IPC_PRIVATE  hat  oder schluessel nicht den Wert
       IPC_PRIVATE  hat,  kein  gemeinsames  Speichersegment   zu   schluessel
       exisitiert und IPC_CREAT in shmflg angegeben wurde.

       Wenn   shmflg  sowohl  IPC_CREAT  als  auch  IPC_EXCL  angibt  und  ein
       gemeinsames Speichersegment  für  schluessel  bereits  existiert,  dann
       schlägt  shmget() fehl und errno wird auf EEXIST gesetzt. (Dies ist mit
       dem  Effekt  der  Kombination  von  O_CREAT  |   O_EXCL   für   open(2)
       vergleichbar.)

       Der Wert shmflg besteht aus:

       IPC_CREAT   um  ein  neues  Segment  zu erstellen. Wenn dieser Schalter
                   nicht benutzt wird, dann wird shmget() das  mit  schluessel
                   verbundene  Segment  suchen und prüfen, ob der Benutzer auf
                   das Segment zugreifen darf.

       IPC_EXCL    sorgt im Verbund  mit  IPC_CREAT  für  eine  Fehlermeldung,
                   falls das Segment bereits existiert.

       mode_flags  (niederwertigste  9  Bits)  geben die Rechte des Besitzers,
                   der Gruppe und dem Rest der Welt an. Diese Bits  haben  das
                   gleiche  Format  und die gleiche Bedeutung wie das Argument
                   mode von  open(2).  Zurzeit  werden  die  Ausführungsrechte
                   nicht vom System benutzt.

       SHM_HUGETLB (seit Linux 2.6)
                   Das  Segment  unter Benutzung von »huge pages« reservieren.
                   Die   Kernel-Quelldatei    Documentation/vm/hugetlbpage.txt
                   enthält weitere Informationen.

       SHM_NORESERVE (seit Linux 2.6.15)
                   Dieser    Schalter    dient    dem   gleichen   Zweck   wie
                   dermmap(2)-Schalter MAP_NORESERVE. Reservieren  Sie  keinen
                   Auslagerungsspeicher     für     dieses    Segment.    Wenn
                   Auslagerungsspeicher reserviert ist, ist  es  sicher,  dass
                   das    Segment    verändert    werden   kann.   Wenn   kein
                   Auslagerungsspeicher reserviert ist,  könnte  SIGSEGV  beim
                   Schreiben  empfangen werden, falls kein physischer Speicher
                   verfügbar  ist.  Siehe  auch  die  Diskussion   der   Datei
                   /proc/sys/vm/overcommit_memory in proc(5).

       Wenn  ein  neues  gemeinsames  Speichersegment erstellt wird, wird sein
       Inhalt  mit  Nullwerten  initialisiert   und   die   damit   verbundene
       Datenstruktur shmid_ds (siehe shmctl(2)) wie folgt initialisiert:

              shm_perm.cuid   und   shm_perm.uid   werden  auf  die  effektive
              Benutzer-ID des aufrufenden Prozesses gesetzt.

              shm_perm.cgid  und  shm_perm.gid  werden   auf   die   effektive
              Gruppen-ID des aufrufenden Prozesses gesetzt.

              Die  niederwertigsten  9  Bit  von  shm_perm.mode werden auf die
              niederwertigsten 9 Bit von shmflg gesetzt.

              shm_segsz wird auf den Wert von groesse gesetzt.

              shm_lpid, shm_nattch,  shm_atime  und  shm_dtime  werden  auf  0
              gesetzt.

              shm_ctime wird auf die aktuelle Zeit gesetzt.

       Wenn  das  gemeinsame  Speichersegment  bereits  existiert,  werden die
       Zugriffsrechte überprüft  und  nachgesehen,  ob  es  für  die  Freigabe
       markiert wurde.

RÜCKGABEWERT

       Bei  Erfolg wird ein gültiger Segment-Bezeichner, shmid, zurückgegeben,
       bei Auftreten eines Fehlers -1.

FEHLER

       Bei Auftreten eines Fehlers enthält errno einen der folgenden Werte:

       EACCES Der  Benutzer  hat  keine  Zugriffsrechte  auf  das   gemeinsame
              Speichersegment und keine CAP_IPC_OWNER-Fähigkeit.

       EEXIST IPC_CREAT | IPC_EXCL wurde angegeben und das Segment existiert.

       EINVAL Es sollte ein neues Segment erstellt werden und groesse < SHMMIN
              oder groesse > SHMMAX oder es sollte kein neues Segment erstellt
              werden,  ein  Segment  mit gegebenem Schlüssel exisitierte, aber
              groesse ist größer als die Größe dieses Segments.

       ENFILE Die Systembeschränkung für die Gesamtzahl offener Dateien  wurde
              erreicht.

       ENOENT Für  den  angegebenen  schluessel  exisitert  kein  Segment  und
              IPC_CREAT wurde nicht angegeben.

       ENOMEM Es konnte kein Speicher für Segment-Zuschlag reserviert werden.

       ENOSPC Alle  möglichen  gemeinsamen  Speicher-IDs  wurden  in  Anspruch
              genommen  (SHMMNI) oder das Reservieren eines Segments der Größe
              groesse würde dazu führen, dass die systemweite  Begrenzung  für
              gemeinsamen Speicher (SHMALL) überschritten wird.

       EPERM  Der  Schalter  SHM_HUGETLB  wurde  angegeben, der Aufrufende war
              aber   nicht   privilegiert   (hatte   nicht    die    Fähigkeit
              CAP_IPC_LOCK).

KONFORM ZU

       SVr4, POSIX.1-2001.

       SHM_HUGETLB ist eine nicht portierbare Linux-Erweiterung.

ANMERKUNGEN

       IPC_PRIVATE  ist  kein  Schalterfeld,  aber  ein key_t-Typ. Wenn dieser
       spezielle Wert für schalter verwandt wird, ignoriert  der  Systemaufruf
       alles  bis  auf die niederwertigsten 9 Bit von shmflg und erstellt (bei
       Erfolg) ein neues gemeinsames Speichersegment.

       Es gelten die folgenden Einschränkungen für die Ressourcen  gemeinsamer
       Speichersegmente, die einen shmget()-Aufruf betreffen:

       SHMALL systemweiter  Maximalwert  für  gemeinsame  Speicherseiten  (auf
              Linux  kann  diese  Einschränkung  über  /proc/sys/kernel/shmall
              gelesen und verändert werden).

       SHMMAX Maximalgröße   eines   gemeinsamen   Speichersegments  in  Byte:
              abhängig vom Regelwerk. (Auf Linux kann diese Einschränkung über
              /proc/sys/kernel/shmax gelesen und verändert werden.)

       SHMMIN Minimalgröße   eines   gemeinsamen   Speichersegments  in  Byte:
              abhängig  vom  der  Implementierung  (momentan  1  Byte,  obwohl
              PAGE_SIZE die effektive Minimalgröße darstellt).

       SHMMNI systemweite  maximale  Anzahl von gemeinsamen Speichersegmenten:
              abhängig von der Implementierung  (derzeit  4096,  war  128  vor
              Linux   2.3.99;   auf   Linux   kann  diese  Einschränkung  über
              /proc/sys/kernel/shmmni gelesen und verändert werden).

       Die  Implementierung  hat  keine  besonderen  Einschränkungen  für  die
       maximale Anzahl gemeinsamer Speichersegmente pro Prozess (SHMSEG).

   Linux-Anmerkungen
       Bis  Version  2.3.30  gab  Linux  EIDRM  für  ein  shmget()  auf  einem
       gemeinsamen Speichersegment zurück, das zur Löschung vorgesehen war.

FEHLER

       Die Wahl des Namens IPC_PRIVATE  war  vielleicht  unglücklich.  IPC_NEW
       wäre für diese Funktion besser gewesen.

SIEHE AUCH

       shmat(2),     shmctl(2),     shmdt(2),     ftok(3),    capabilities(7),
       shm_overview(7), svipc(7)

KOLOPHON

       Diese  Seite  ist  Teil  der   Veröffentlichung   3.32   des   Projekts
       Linux-man-pages.  Eine Beschreibung des Projekts und Informationen, wie
       Fehler    gemeldet     werden     können,     finden     sich     unter
       http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite wurde von Ralf Demmer
       <rdemmer@rdemmer.de> und Chris Leick <c.leick@vollbio.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>.