Provided by: manpages-de-dev_1.4-1_all bug

BEZEICHNUNG

       shmget - ein gemeinsames System-V-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 System-V-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
                   Linux-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 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-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

       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 (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

       This page is part of release 3.54 of the Linux man-pages project.  A  description  of  the
       project,     and    information    about    reporting    bugs,    can    be    found    at
       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>.