.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993 .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified Wed Jul 28 10:57:35 1993, Rik Faith .\" Modified Sun Nov 28 16:43:30 1993, Rik Faith .\" with material from Giorgio Ciucci .\" Portions Copyright 1993 Giorgio Ciucci .\" Modified Tue Oct 22 22:03:17 1996 by Eric S. Raymond .\" Modified, 8 Jan 2003, Michael Kerrisk, .\" Removed EIDRM from errors - that can't happen... .\" Modified, 27 May 2004, Michael Kerrisk .\" Added notes on capability requirements .\" Modified, 11 Nov 2004, Michael Kerrisk .\" Language and formatting clean-ups .\" Added notes on /proc files .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SHMGET 2 "11. April 2020" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG shmget \- ein gemeinsames System\-V\-Speichersegment reservieren .SH ÜBERSICHT .ad l \fB#include \fP .br \fB#include \fP .PP \fBint shmget(key_t \fP\fISchlüssel\fP\fB, size_t \fP\fIGröße\fP\fB, int \fP\fIshmflg\fP\fB);\fP .ad b .SH BESCHREIBUNG \fBshmget\fP() gibt den Bezeichner des gemeinsamen System\-V\-Speichersegments zurück, der mit dem Wert des Arguments \fISchlüssel\fP verknüpft ist. Es kann entweder dazu verwandt werden, den Bezeichner eines vorher erstellten gemeinsamen Speichersegments zu erhalten (wenn \fIshmflg\fP Null ist und \fISchlüssel\fP nicht den Wert \fBIPC_PRIVATE\fP hat) oder um eine neue Gruppe zu erstellen. .PP Es wird ein neues gemeinsames Speichersegment erstellt, dessen Größe dem auf ein Vielfaches von \fBPAGE_SIZE\fP gerundeten Wert von \fIGröße\fP entspricht, falls \fISchlüssel\fP den Wert \fBIPC_PRIVATE\fP hat oder \fISchlüssel\fP nicht den Wert \fBIPC_PRIVATE\fP hat, kein gemeinsames Speichersegment zu \fISchlüssel\fP existiert und \fBIPC_CREAT\fP in \fIshmflg\fP angegeben wurde. .PP Wenn \fIshmflg\fP sowohl \fBIPC_CREAT\fP als auch \fBIPC_EXCL\fP angibt und ein gemeinsames Speichersegment für \fISchlüssel\fP bereits existiert, dann schlägt \fBshmget\fP() fehl und \fIerrno\fP wird auf \fBEEXIST\fP gesetzt. (Dies ist mit dem Effekt der Kombination von \fBO_CREAT | O_EXCL\fP für \fBopen\fP(2) vergleichbar.) .PP Der Wert \fIshmflg\fP besteht aus: .TP \fBIPC_CREAT\fP Erstellung eines neuen Segments. Wenn dieser Schalter nicht benutzt wird, dann wird \fBshmget\fP() das mit \fISchlüssel\fP verbundene Segment suchen und prüfen, ob der Benutzer auf das Segment zugreifen darf. .TP \fBIPC_EXCL\fP Dieser Schalter wird mit \fBIPC_CREAT\fP verwendet, um sucherzustellen, dass dieser Aufruf das Segment erzeugt. Falls das Segment bereits existiert, schlägt der Aufruf fehl. .TP \fBSHM_HUGETLB\fP (seit Linux 2.6) Das Segment unter Benutzung von »großer Speicherseiten« reservieren. Die Linux\-Kernel\-Quelldatei \fIDocumentation/admin\-guide/mm/hugetlbpage.rst\fP enthält weitere Informationen. .TP \fBSHM_HUGE_2MB\fP, \fBSHM_HUGE_1GB\fP (seit Linux 3.8) .\" See https://lwn.net/Articles/533499/ wird zusammen mit \fBSHM_HUGETLB\fP verwendet, um alternative Hugetlb\-Seitengrößen (2\ MB bzw. 1\ GB) auf Systemen auszuwählen, die mehrere Hugetlb\-Seitengrößen unterstützen. .IP 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 \fBSHM_HUGE_SHIFT\fP konfiguriert werden. Daher sind die beiden Konstanten oberhalb wie folgt definiert: .IP .in +4n .EX #define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT) #define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT) .EE .in .IP Für einige zusätzliche Details sehen Sie die Diskussion der ähnlich benannten Konstanten in \fBmmap\fP(2). .TP \fBSHM_NORESERVE\fP (seit Linux 2.6.15) .\" As at 2.6.17-rc2, this flag has no effect if SHM_HUGETLB was also .\" specified. Dieser Schalter dient dem gleichen Zweck wie der \fBmmap\fP(2)\-Schalter \fBMAP_NORESERVE\fP. 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 \fBSIGSEGV\fP beim Schreiben empfangen werden, falls kein physischer Speicher verfügbar ist. Siehe auch die Diskussion der Datei \fI/proc/sys/vm/overcommit_memory\fP in \fBproc\fP(5). .PP Zusätzlich zu den oben genannten Schaltern geben die niederwertigsten neun Bits von \fIshmflg\fP die Rechte des Besitzers, der Gruppe und dem Rest der Welt an. Diese Bits haben dasselbe Format und dieselbe Bedeutung wie das Argument \fImode\fP von \fBopen\fP(2). Zurzeit werden die Ausführungsrechte nicht vom System benutzt. .PP Wenn ein neues gemeinsames Speichersegment erstellt wird, wird sein Inhalt mit Nullwerten initialisiert und die damit verbundene Datenstruktur \fIshmid_ds\fP (siehe \fBshmctl\fP(2)) wie folgt initialisiert: .IP \(bu 2 \fBshm_perm.cuid\fP und \fBshm_perm.uid\fP werden auf die effektive Benutzerkennung des aufrufenden Prozesses gesetzt. .IP \(bu \fBshm_perm.cgid\fP und \fBshm_perm.gid\fP werden auf die effektive Gruppenkennung des aufrufenden Prozesses gesetzt. .IP \(bu Die niederwertigsten 9 Bit von \fBshm_perm.mode\fP werden auf die niederwertigsten 9 Bit von \fIshmflg\fP gesetzt. .IP \(bu \fBshm_segsz\fP wird auf den Wert von \fIGröße\fP gesetzt. .IP \(bu \fBshm_lpid\fP, \fBshm_nattch\fP, \fBshm_atime\fP und \fBshm_dtime\fP werden auf 0 gesetzt. .IP \(bu \fIshm_ctime\fP wird auf die aktuelle Zeit gesetzt. .PP Wenn das gemeinsame Speichersegment bereits existiert, werden die Zugriffsrechte überprüft und nachgesehen, ob es für die Freigabe markiert wurde. .SH RÜCKGABEWERT Bei Erfolg wird ein gültiger Bezeichner für gemeinsam benutzten Speicher zurückgegeben. Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP entsprechend gesetzt. .SH FEHLER Bei Fehlschlag wird \fIerrno\fP auf eines der Folgenden gesetzt: .TP \fBEACCES\fP Der Benutzer hat keine Zugriffsrechte auf das gemeinsame Speichersegment und keine \fBCAP_IPC_OWNER\fP\-Capability in dem Benutzernamensraum, der seinen IPC\-Namensraum beherrscht. .TP \fBEEXIST\fP \fBIPC_CREAT\fP und \fBIPC_EXCL\fP wurden in \fIshmflg\fP angegeben, aber für \fISchlüssel\fP existiert bereits ein gemeinsam benutztes Speichersegment. .TP \fBEINVAL\fP Es wurde ein neues Segment erstellt und \fIGröße\fP ist kleiner als \fBSHMMIN\fP oder größer als \fBSHMMAX\fP. .TP \fBEINVAL\fP Es existiert ein Segment für den angegebenen \fISchlüssel\fP, aber \fIGröße\fP ist größer als die Größe dieses Segments. .TP \fBENFILE\fP .\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp() Die systemweite Beschränkung für die Gesamtzahl offener Dateien wurde erreicht. .TP \fBENOENT\fP Für den angegebenen \fISchlüssel\fP existiert kein Segment und \fBIPC_CREAT\fP wurde nicht angegeben. .TP \fBENOMEM\fP Es konnte kein Speicher für Segment\-Zuschlag reserviert werden. .TP \fBENOSPC\fP Alle möglichen gemeinsamen Speicherkennungen wurden in Anspruch genommen (\fBSHMMNI\fP) oder das Reservieren eines Segments der Größe \fIGröße\fP würde dazu führen, dass die systemweite Begrenzung für gemeinsamen Speicher (\fBSHMALL\fP) überschritten wird. .TP \fBEPERM\fP Der Schalter \fBSHM_HUGETLB\fP wurde angegeben, der Aufrufende war aber nicht privilegiert (hatte nicht die Capability \fBCAP_IPC_LOCK\fP). .SH "KONFORM ZU" .\" SVr4 documents an additional error condition EEXIST. POSIX.1\-2001, POSIX.1\-2008, SVr4. .PP \fBSHM_HUGETLB\fP und \fBSHM_NORESERVE\fP sind Linux\-Erweiterungen. .SH ANMERKUNGEN .\" Like Linux, the FreeBSD man pages still document .\" the inclusion of these header files. Unter Linux und allen Versionen von POSIX ist die Einbindung von \fI\fP und \fI\fP nicht notwendig. Allerdings benötigten einige alte Implementierungen die Einbindung dieser Header\-Dateien und SVID dokumentierte auch ihre Einbindung. Anwendungen, die auf solche alten Systeme portierbar sein müssen, könnten die Einbindung dieser Header\-Dateien benötigen. .PP .\" \fBIPC_PRIVATE\fP ist kein Schalterfeld, aber ein \fBkey_t\fP\-Typ. Wenn dieser spezielle Wert für \fIschalter\fP verwandt wird, ignoriert der Systemaufruf alles bis auf die niederwertigsten 9 Bit von \fIshmflg\fP und erstellt ein neues gemeinsames Speichersegment. .SS "Beschränkungen des gemeinsam genutzten Speichers" Es gelten die folgenden Einschränkungen für die Ressourcen gemeinsamer Speichersegmente, die einen \fBshmget\fP()\-Aufruf betreffen: .TP \fBSHMALL\fP systemweite Beschränkung des Gesamtbetrags gemeinsam genutzten Speichers, gemessen in Einheiten der Seitengröße des Systems .IP .\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31 Unter Linux kann diese Beschränkung über \fI/proc/sys/kernel/shmall\fP ermittelt und verändert werden. Seit Linux 3.16 ist der voreingestellte Wert für diese Beschränkung: .IP ULONG_MAX \- 2^24 .IP 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 \fBULONG_MAX\fP 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 \fBULONG_MAX\fP gesetzt wäre. .IP Von Linux 2.4 bis 3.15 war der voreingestellte Wert für diese Beschränkung: .IP SHMMAX / PAGE_SIZE * (SHMMNI / 16) .IP Falls \fBSHMMAX\fP und \fBSHMMNI\fP 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. .TP \fBSHMMAX\fP maximale Größe in Byte für ein gemeinsames Speichersegment .IP .\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31 Unter Linux kann diese Einschränkung über \fI/proc/sys/kernel/shmmax\fP verändert werden. Seit Linux 3.16 ist der voreingestellte Wert für diese Beschränkung: .IP ULONG_MAX \- 2^24 .IP 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 \fBSHMALL\fP, wenn Sie erfahren möchten, warum dieser Wert (anstelle von \fBULONG_MAX\fP) als Voreinstellung verwendet wird. .IP Von Linux 2.2 bis 3.15 war der voreingestellte Wert dieser Beschränkung 0x2000000 (32\ MB). .IP 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. .TP \fBSHMMIN\fP Minimalgröße eines gemeinsamen Speichersegments in Byte: abhängig vom der Implementierung (momentan 1 Byte, obwohl \fBPAGE_SIZE\fP die effektive Minimalgröße darstellt). .TP \fBSHMMNI\fP 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. .IP .\" Kernels between 2.4.x and 2.6.8 had an off-by-one error that meant .\" that we could create one more segment than SHMMNI -- MTK .\" This /proc file is not available in Linux 2.2 and earlier -- MTK Unter Linux kann diese Einschränkung über \fI/proc/sys/kernel/shmmni\fP gelesen und verändert werden. .PP Die Implementierung hat keine besonderen Einschränkungen für die maximale Anzahl gemeinsamer Speichersegmente pro Prozess (\fBSHMSEG\fP). .SS Linux\-Anmerkungen Bis Version 2.3.30 gab Linux \fBEIDRM\fP für ein \fBshmget\fP() auf einem gemeinsamen Speichersegment zurück, das zur Löschung vorgesehen war. .SH FEHLER Die Namenswahl \fBIPC_PRIVATE\fP war vielleicht unglücklich, \fBIPC_NEW\fP würde seine Funktion deutlicher anzeigen. .SH BEISPIELE Siehe \fBshmop\fP(2). .SH "SIEHE AUCH" \fBmemfd_create\fP(2), \fBshmat\fP(2), \fBshmctl\fP(2), \fBshmdt\fP(2), \fBftok\fP(3), \fBcapabilities\fP(7), \fBshm_overview\fP(7), \fBsysvipc\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. 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/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Ralf Demmer , Chris Leick und Helge Kreutzmann erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE 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 .MT debian-l10n-german@\:lists.\:debian.\:org Mailingliste der Übersetzer .ME .