Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       shmget - ein gemeinsames System-V-Speichersegment reservieren

ÜBERSICHT

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

       int shmget(key_t Schlüssel, size_t Größe, int shmflg);

BESCHREIBUNG

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

       Wenn  shmflg  sowohl IPC_CREAT als auch IPC_EXCL angibt und ein gemeinsames Speichersegment für Schlüssel
       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   Erstellung eines neuen Segments. Wenn dieser Schalter nicht benutzt wird, dann wird  shmget()
                   das  mit  Schlüssel  verbundene  Segment  suchen  und prüfen, ob der Benutzer auf das Segment
                   zugreifen darf.

       IPC_EXCL    Dieser Schalter wird mit IPC_CREAT verwendet, um  sucherzustellen,  dass  dieser  Aufruf  das
                   Segment erzeugt. Falls das Segment bereits existiert, schlägt der Aufruf fehl.

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

       SHM_HUGE_2MB, SHM_HUGE_1GB (seit Linux 3.8)
                   wird zusammen mit SHM_HUGETLB verwendet, um alternative Hugetlb-Seitengrößen (2 MB bzw. 1 GB)
                   auf Systemen auszuwählen, die mehrere Hugetlb-Seitengrößen unterstützen.

                   Allgemeiner  ausgedrückt,  kann  die  gewünschte  Größe  großer  Seiten  durch  Kodieren  des
                   Logarithmus  zur  Basis  2  der  gewünschten  Seitengröße in den ersten sechs Bit versetzt um
                   SHM_HUGE_SHIFT konfiguriert werden. Daher sind  die  beiden  Konstanten  oberhalb  wie  folgt
                   definiert:

                       #define SHM_HUGE_2MB    (21 << SHM_HUGE_SHIFT)
                       #define SHM_HUGE_1GB    (30 << SHM_HUGE_SHIFT)

                   Für  einige  zusätzliche Details sehen Sie die Diskussion der ähnlich benannten Konstanten in
                   mmap(2).

       SHM_NORESERVE (seit Linux 2.6.15)
                   Dieser Schalter dient dem gleichen Zweck wie der mmap(2)-Schalter  MAP_NORESERVE.  Reserviert
                   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).

       Zusätzlich zu den oben genannten Schaltern geben die niederwertigsten neun Bits von shmflg die Rechte des
       Besitzers, der Gruppe und dem Rest der Welt an. Diese Bits haben dasselbe Format und  dieselbe  Bedeutung
       wie das Argument mode von open(2). Zurzeit werden die Ausführungsrechte nicht vom System benutzt.

       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 Größe 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 Bezeichner für gemeinsam benutzten Speicher zurückgegeben. Bei einem  Fehler
       wird -1 zurückgegeben und errno entsprechend gesetzt.

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-Capability in dem Benutzernamensraum, der seinen IPC-Namensraum beherrscht.

       EEXIST IPC_CREAT und IPC_EXCL wurden in shmflg  angegeben,  aber  für  Schlüssel  existiert  bereits  ein
              gemeinsam benutztes Speichersegment.

       EINVAL Es wurde ein neues Segment erstellt und Größe ist kleiner als SHMMIN oder größer als SHMMAX.

       EINVAL Es existiert ein Segment für den angegebenen Schlüssel, aber Größe ist größer als die Größe dieses
              Segments.

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

       ENOENT Für den angegebenen Schlüssel existiert 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 Größe 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 Capability CAP_IPC_LOCK).

KONFORM ZU

       POSIX.1-2001, POSIX.1-2008, SVr4.

       SHM_HUGETLB und SHM_NORESERVE sind Linux-Erweiterungen.

ANMERKUNGEN

       Das Einbinden von <sys/types.h> und <sys/ipc.h> ist nicht auf Linux oder in irgendeiner Version von POSIX
       erforderlich. Einige alte Implementierungen benötigten das Einbinden dieser Header-Dateien und  das  SVID
       dokumentiert  ihr  Einbinden ebenfalls. Anwendungen, die auf solche alten Systeme portierbar sein sollen,
       könnten das Einbinden dieser Header-Dateien erfordern.

       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 ein
       neues gemeinsames Speichersegment.

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

       SHMALL systemweite  Beschränkung  des  Gesamtbetrags gemeinsam genutzten Speichers, gemessen in Einheiten
              der Seitengröße des Systems

              Unter Linux kann diese Beschränkung über /proc/sys/kernel/shmall ermittelt und  verändert  werden.
              Seit Linux 3.16 ist der voreingestellte Wert für diese Beschränkung:

                  ULONG_MAX - 2^24

              Dieser  Wert  (der  sowohl  auf  32-  als auch auf 64-Bit-Systeme anwendbar ist) bewirkt, dass bei
              Speicherreservierungen keine Beschränkungen  zum  Zug  kommen.  Dieser  Wert  wurde  anstelle  von
              ULONG_MAX  als  Voreinstellung  gewählt,  um  Fälle zu vermeiden, in denen historische Anwendungen
              einfach die bestehende Beschränkung erhöht haben, ohne zuerst  ihren  aktuellen  Wert  zu  prüfen.
              Derartige Anwendungen würden den Wert zum Überlaufen bringen, falls die Beschränkung auf ULONG_MAX
              gesetzt wäre.

              Von Linux 2.4 bis 3.15 war der voreingestellte Wert für diese Beschränkung:

                  SHMMAX / PAGE_SIZE * (SHMMNI / 16)

              Falls  SHMMAX  und  SHMMNI  nicht  verändert  wurden, dann wird das Ergebnis dieser Formel mit der
              Seitengröße multipliziert (um einen Wert in Byte zu erhalten). Dies ergibt einen Wert von 8 GB als
              Beschränkung des gesamten von allen gemeinsamen Speichersegmenten benutzten Speichers.

       SHMMAX maximale Größe in Byte für ein gemeinsames Speichersegment

              Unter Linux kann diese Einschränkung über /proc/sys/kernel/shmmax  verändert  werden.  Seit  Linux
              3.16 ist der voreingestellte Wert für diese Beschränkung:

                  ULONG_MAX - 2^24

              Dieser  Wert  (der  sowohl  auf  32-  als auch auf 64-Bit-Systeme anwendbar ist) bewirkt, dass bei
              Speicherreservierungen keine Beschränkungen zum Zug kommen. Lesen Sie die Beschreibung von SHMALL,
              wenn Sie erfahren möchten, warum dieser Wert (anstelle von ULONG_MAX) als Voreinstellung verwendet
              wird.

              Von Linux 2.2 bis 3.15 war der voreingestellte Wert dieser Beschränkung 0x2000000 (32 MB).

              Because it is not possible to map just part of a shared memory  segment,  the  amount  of  virtual
              memory  places  another  limit  on  the maximum size of a usable segment: for example, on i386 the
              largest segments that can be mapped have a size of around 2.8 GB,  and  on  x86-64  the  limit  is
              around 127 TB.

       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 Beschränkung der Anzahl gemeinsam benutzter Speichersegmente. Unter Linux 2.2 war  der
              Vorgabewert für diese Einschränkung 128, seit Linux 2.4 ist er 4096.

              Unter 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

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

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  des Projekts Linux-man-pages. Eine Beschreibung des
       Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
       sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

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

Linux                                          15. September 2017                                      SHMGET(2)