Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
shmget - ein gemeinsames Speichersegment reservieren
"UBERSICHT
#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 zuruck,
der mit dem Wert des Arguments schluessel verknupft ist. Es wird ein
neues gemeinsames Speichersegment erstellt, dessen GroBe 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 fur schluessel bereits existiert, dann
schlagt shmget() fehl und errno wird auf EEXIST gesetzt. (Dies ist mit
dem Effekt der Kombination von O_CREAT | O_EXCL fur 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 prufen, ob der Benutzer auf
das Segment zugreifen darf.
IPC_EXCL sorgt im Verbund mit IPC_CREAT fur 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 Ausfuhrungsrechte
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
enthalt 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 fur dieses Segment. Wenn
Auslagerungsspeicher reserviert ist, ist es sicher, dass
das Segment verandert werden kann. Wenn kein
Auslagerungsspeicher reserviert ist, konnte SIGSEGV beim
Schreiben empfangen werden, falls kein physischer Speicher
verfugbar 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 uberpruft und nachgesehen, ob es fur die Freigabe
markiert wurde.
R"UCKGABEWERT
Bei Erfolg wird ein gultiger Segment-Bezeichner, shmid, zuruckgegeben,
bei Auftreten eines Fehlers -1.
FEHLER
Bei Auftreten eines Fehlers enthalt errno einen der folgenden Werte:
EACCES Der Benutzer hat keine Zugriffsrechte auf das gemeinsame
Speichersegment und keine CAP_IPC_OWNER-Fahigkeit.
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 Schlussel exisitierte, aber
groesse ist groBer als die GroBe dieses Segments.
ENFILE Die Systembeschrankung fur die Gesamtzahl offener Dateien wurde
erreicht.
ENOENT Fur den angegebenen schluessel exisitert kein Segment und
IPC_CREAT wurde nicht angegeben.
ENOMEM Es konnte kein Speicher fur Segment-Zuschlag reserviert werden.
ENOSPC Alle moglichen gemeinsamen Speicher-IDs wurden in Anspruch
genommen (SHMMNI) oder das Reservieren eines Segments der GroBe
groesse wurde dazu fuhren, dass die systemweite Begrenzung fur
gemeinsamen Speicher (SHMALL) uberschritten wird.
EPERM Der Schalter SHM_HUGETLB wurde angegeben, der Aufrufende war
aber nicht privilegiert (hatte nicht die Fahigkeit
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 fur 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 Einschrankungen fur die Ressourcen gemeinsamer
Speichersegmente, die einen shmget()-Aufruf betreffen:
SHMALL systemweiter Maximalwert fur gemeinsame Speicherseiten (auf
Linux kann diese Einschrankung uber /proc/sys/kernel/shmall
gelesen und verandert werden).
SHMMAX MaximalgroBe eines gemeinsamen Speichersegments in Byte:
abhangig vom Regelwerk. (Auf Linux kann diese Einschrankung uber
/proc/sys/kernel/shmax gelesen und verandert werden.)
SHMMIN MinimalgroBe eines gemeinsamen Speichersegments in Byte:
abhangig vom der Implementierung (momentan 1 Byte, obwohl
PAGE_SIZE die effektive MinimalgroBe darstellt).
SHMMNI systemweite maximale Anzahl von gemeinsamen Speichersegmenten:
abhangig von der Implementierung (derzeit 4096, war 128 vor
Linux 2.3.99; auf Linux kann diese Einschrankung uber
/proc/sys/kernel/shmmni gelesen und verandert werden).
Die Implementierung hat keine besonderen Einschrankungen fur die
maximale Anzahl gemeinsamer Speichersegmente pro Prozess (SHMSEG).
Linux-Anmerkungen
Bis Version 2.3.30 gab Linux EIDRM fur ein shmget() auf einem
gemeinsamen Speichersegment zuruck, das zur Loschung vorgesehen war.
FEHLER
Die Wahl des Namens IPC_PRIVATE war vielleicht unglucklich. IPC_NEW
ware fur 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 Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Ralf Demmer
<rdemmer@rdemmer.de> und Chris Leick <c.leick@vollbio.de> erstellt.
Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General
Public License Version 3 oder neuer bezuglich der Copyright-
Bedingungen. Es wird KEINE HAFTUNG ubernommen.
Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an <debian-l10n-
german@lists.debian.org>.