Provided by: manpages-de-dev_4.15.0-9_all bug

BEZEICHNUNG

       shmget - ein gemeinsames System-V-Speichersegment reservieren

ÜBERSICHT

       #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 kann entweder  dazu  verwandt  werden,  den
       Bezeichner  eines  vorher erstellten gemeinsamen Speichersegments zu erhalten (wenn shmflg
       Null ist und Schlüssel nicht den Wert  IPC_PRIVATE  hat)  oder  um  eine  neue  Gruppe  zu
       erstellen.

       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  »großen«  Speicherseiten  reservieren.  Die
              Linux-Kernel-Quelldatei    Documentation/admin-guide/mm/hugetlbpage.rst     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  Speicherseiten  durch
              Kodieren  des  Logarithmus  zur  Basis  2 der gewünschten Seitengröße in den ersten
              sechs Bit versetzt am Versatz 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 Benutzerkennung des  aufrufenden
         Prozesses gesetzt.

       • shm_perm.cgid  und  shm_perm.gid werden auf die effektive Gruppenkennung 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

       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 Speicherkennungen 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) und ist auch  kein  Mitglied
              der     Gruppe     sysctl_hugetlb_shm_group;    siehe    die    Beschreibung    von
              /proc/sys/vm/sysctl_hugetlb_shm_group in proc(5).

KONFORM ZU

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

       SHM_HUGETLB und SHM_NORESERVE sind Linux-Erweiterungen.

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 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).

              Da  es  nicht  möglich  ist,  nur  einen Teil eines gemeinsamen Speichersegments zu
              mappen, setzt der Betrag des virtuellen Speichers  eine  weitere  Beschränkung  der
              maximalen  Größe  eines  benutzbaren  Segments:  Zum  Beispiel  können auf i386 die
              größten Segmente, die gemappt werden können, eine Größe um 2,8 GB haben. Auf x86_64
              liegt die Beschränkung bei etwa 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 Namenswahl IPC_PRIVATE  war  vielleicht  unglücklich,  IPC_NEW  würde  seine  Funktion
       deutlicher anzeigen.

BEISPIELE

       Siehe shmop(2).

SIEHE AUCH

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

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  5.13  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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.