1 .\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) Juliy 28, 1993
3 .\" Permission is granted to make and distribute verbatim copies of this
4 .\" manual provided the copyright notice and this permission notice are
5 .\" preserved on all copies.
7 .\" Permission is granted to copy and distribute modified versions of this
8 .\" manual under the conditions for verbatim copying, provided that the
9 .\" entire resulting derived work is distributed under the terms of a
10 .\" permission notice identical to this one
12 .\" Since the Linux kernel and libraries are constantly changing, this
13 .\" manual page may be incorrect or out-of-date. The author(s) assume no
14 .\" responsibility for errors or omissions, or for damages resulting from
15 .\" the use of the information contained herein. The author(s) may not
16 .\" have taken the same level of care in the production of this manual,
17 .\" which is licensed free of charge, as they might when working
20 .\" Formatted or processed versions of this manual, if unaccompanied by
21 .\" the source, must acknowledge the copyright and authors of this work.
23 .\" Modified Wed Juli 28 10:57:35 1993, Rik Faith <faith@cs.unc.edu>
24 .\" Modified Sun November 28 16:43:30 1993, Rik Faith <faith@cs.unc.edu>
25 .\" with material from Giorgio Ciucci <giorgio@crcc.it>
26 .\" Portions Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
27 .\" Modified Tue Oktober 22 22:03:17 1996 by Eric S. Raymond <esr@thyrsus.com>
29 .\" Translated into German by Ralf Demmer, Translation & Consulting
30 .\" rdemmer@rdemmer.de, http://www.rdemmer.de
33 .TH SHMGET 2 "28. November 1993" "Linux 0.99.11" "Systemaufrufe"
35 shmget \- weist ein gemeinsames Speichersegment zu
38 .B #include <sys/ipc.h>
40 .B #include <sys/shm.h>
42 .BI int shmget(key_t key , int size , int shmflg );
46 gibt den Identifikator des gemeinsamen Speichersegments zurück, der dem
49 zugewiesen ist. Ein neues gemeinsames Speichersegment mit der um
51 auf ein mehrfaches von
53 aufgerundeten Größe wird nur dann erstellt,
61 ist, sonst wird dem Wert
63 kein gemeinsames Speichersegment zugeordnet, und
76 für das Erstellen eines neuen Segments. Wenn dieses Flag nicht belegt wird,
81 zugeordnete Segment, prüft, ob der Benutzer die nötigen Rechte besitzt, um
82 die dem Segment zugeordnete
84 zu erhalten und stellt sicher, dass das Segment nicht zum Löschen markiert ist.
89 für eine Fehlermeldung, falls das Segment bereits existiert.
91 .B mode_flags (untere 9 Bit)
92 legt die Rechte für den Eigentümer, die Benutzergruppe und den Rest der Welt
93 fest. Zurzeit werden die Ausführungsrechte vom System nicht verwendet.
95 Wenn ein neues Segment erstellt wird, werden die Zugriffsrechte von
101 -Struktur kopiert, die das Segment definiert. Die
102 .IR shmid_ds -Struktur:
107 struct ipc_perm shm_perm; /* Rechte */
108 int shm_segsz; /* Größe des Segments in Byte */
109 time_t shm_atime; /* letzte Anhangszeitpunkt */
110 time_t shm_dtime; /* letzter Entkopplungszeitpunkt */
111 time_t shm_ctime; /* letzter Änderungszeitpunkt */
112 unsigned short shm_cpid; /* PID des Erzeugers */
113 unsigned short shm_lpid; /* PID des letzten Operators */
114 short shm_nattch; /* Anzahl der momentanen Anhänge */
124 ushort uid; /* Besitzer-euid und egid */
126 ushort cuid; /* Erzeuger-euid und egid */
128 ushort mode; /* untere 9 Bit von \fIshmflg\fP */
129 ushort seq; /* Folgenummer */
133 Im weiteren initialisiert der Systemaufruf beim Erstellen die Systemdatenstruktur des gemeinsamen Speichersegments
140 werden mit den tatsächliche Benutzer\-ID des aufrufenden Prozesses belegt.
145 werden mit den tatsächliche Gruppen\-ID des aufrufenden Prozesses belegt.
147 Die niederwertigsten 9 Bit von
149 werden den niederwertigsten 9 Bit von
154 wird mit dem Wert von
167 wird auf die aktuelle Zeit gesetzt.
169 Wenn das gemeinsame Speichersegment bereits existiert, werden die
170 Zugriffsrechte verglichen und überprüft, ob es zum Löschen freigegeben
171 (bzw. markiert) wurde.
178 erbt der Kind-Prozess das angehängte gemeinsame Speichersegment.
183 sind alle angehängten gemeinsamen Speichersegmente entkoppelt (nicht zerstört).
188 sind alle angehängten gemeinsamen Speichersegmente entkoppelt (nicht zerstört).
191 Bei Erfolg wird ein gültiger Segment-Identifier zurückgegeben:
193 bei Auftreten eines Fehlers \-1.
195 Bei Auftreten eines Fehlers enthält
197 einen der folgenden Werte:
200 wird zurückgegeben, wenn
202 .IR size " oder " size
206 größer als die Segmentgröße ist.
209 wird zurückgegeben, wenn
210 .B IPC_CREAT | IPC_EXCL
211 angegeben wurde und das Segment existiert.
214 wird zurückgegeben, wenn das Segment als zerstört markiert oder entfernt wurde.
217 wird zurückgegeben, wenn alle möglichen IDs für gemeinsame Speichersegmente
219 angenommen haben oder ein Segment der angeforderten
221 zu einer Überschreitung der systemweiten Speichergrenze für gemeinsame
222 Speichersegmente führen würde.
226 wird zurückgegeben, wenn für den angegebenen
228 kein Segment existiert und
230 nicht angegeben wurde.
233 wird zurückgegeben, wenn der Benutzer keine Zugriffsrechte auf das gemeinsame
234 Speichersegment besitzt.
237 wird zurückgegeben, wenn kein Speicher für den Segment-Overhead bereitgestellt
241 ist kein Flag-Feld, sondern vom Typ
243 Wenn dieser spezielle Wert für
245 verwendet wird, ignoriert der Systemaufruf alles bis auf die unteren 9 Bit von
247 und erstellt bei Erfolg ein neues gemeinsames Speichersegment.
249 Es gelten die folgenden Einschränkungen auf die Ressourven gemeinsamer
250 Speichersegmente, die einen
255 Systemweiter Maximalwert für gemeinsam genutzte Speicherblöcke: abhängig von
259 Maximalgröße eines gemeinsamen Speichersegments in Byte: abhängig von der
260 jeweiligen Umsetzung (momentan bei 4 MB).
263 Minimalgröße eines gemeinsamen Speichersegments: abhängig von der jeweiligen
264 Umsetzung (momentan 1 byte, obwohl
266 die wirkliche Minimalgröße darstellt).
269 Systemweite maximale Anzahl von gemeinsamen Speichersegmenten: abhängig von
270 der jeweiligen Umsetzung (momentan 4096).
272 Die jeweilige Umsetzung setzt keine Beschrängungen für die maximale Anzahl
273 von gemeinsamen Speichersegmenten pro Prozess
278 unterbindet nicht den Zugriff anderer Prozesse auf das zugeordnete gemeinsame
281 Genau wie für Dateien, gibt es momentan keinen eigenständigen Weg für einen
282 Prozess den ausschließlichen Zugriff auf ein gemeinsam genutztes
283 Speichersegment sicherzustellen. Die Zuweisung von
289 garantiert bei Erfolg nur die Erstellung eines neuen gemeinsamen
290 Speichersegments, nicht aber den ausschließlichen Zugriff auf das Segment.
292 SVr4, SVID. Unter SVr4 ist eine weitere Fehlerbedingung EEXIST dokumentiert.
293 Weder SVr4 noch SVID enthalten eine Dokumentation zu EIDRM-Bedingungen.