]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/shmget.2
s/XXX/FIXME/
[thirdparty/man-pages.git] / man2 / shmget.2
CommitLineData
fea681da
MK
1.\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993
2.\"
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.
6.\"
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.
11.\"
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
18.\" professionally.
19.\"
20.\" Formatted or processed versions of this manual, if unaccompanied by
21.\" the source, must acknowledge the copyright and authors of this work.
22.\"
23.\" Modified Wed Jul 28 10:57:35 1993, Rik Faith <faith@cs.unc.edu>
24.\" Modified Sun Nov 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 Oct 22 22:03:17 1996 by Eric S. Raymond <esr@thyrsus.com>
305a0578 28.\" Modified, 8 Jan 2003, Michael Kerrisk, <mtk-manpages@gmx.net>
fea681da 29.\" Removed EIDRM from errors - that can't happen...
305a0578 30.\" Modified, 27 May 2004, Michael Kerrisk <mtk-manpages@gmx.net>
fea681da 31.\" Added notes on capability requirements
c952e226
MK
32.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk-manpages@gmx.net>
33.\" Language and formatting clean-ups
34.\" Added notes on /proc files
fea681da 35.\"
f39637fa 36.TH SHMGET 2 2005-10-26 "Linux 2.6.14" "Linux Programmer's Manual"
fea681da
MK
37.SH NAME
38shmget \- allocates a shared memory segment
39.SH SYNOPSIS
40.ad l
41.B #include <sys/ipc.h>
42.sp
43.B #include <sys/shm.h>
44.sp
f7174672 45.BI "int shmget(key_t " key ", size_t " size ", int " shmflg );
fea681da
MK
46.ad b
47.SH DESCRIPTION
c952e226 48.BR shmget ()
fea681da
MK
49returns the identifier of the shared memory segment
50associated with the value of the argument
51.IR key .
52A new shared memory segment, with size equal to the value of
53.I size
54rounded up to a multiple of
55.BR PAGE_SIZE ,
56is created if
57.I key
58has the value
59.B IPC_PRIVATE
60or
61.I key
62isn't
63.BR IPC_PRIVATE ,
64no shared memory segment corresponding to
65.IR key
66exists, and
67.B IPC_CREAT
c952e226
MK
68is specified in
69.IR shmflg .
70.PP
71If
fea681da 72.I shmflg
c952e226
MK
73specifies both
74.B IPC_CREAT
75and
76.B IPC_EXCL
77and a shared memory segment already exists for
78.IR key ,
79then
80.BR shmget ()
81fails with
82.I errno
83set to
84.BR EEXIST .
85(This is analogous to the effect of the combination
86.B O_CREAT | O_EXCL
87for
88.BR open (2).)
fea681da
MK
89.PP
90The value
91.I shmflg
92is composed of:
93.TP 12
94.B IPC_CREAT
95to create a new segment. If this flag is not used, then
c952e226 96.BR shmget ()
fea681da
MK
97will find the segment associated with \fIkey\fP and check to see if
98the user has permission to access the segment.
99.TP
100.B IPC_EXCL
101used with \fBIPC_CREAT\fP to ensure failure if the segment already exists.
102.TP
c952e226
MK
103.I mode_flags
104(least significant 9 bits)
fea681da 105specifying the permissions granted to the owner, group, and world.
c952e226
MK
106These bits have the same format, and the same
107meaning, as the
108.I mode
109argument of
110.BR open (2).
fea681da 111Presently, the execute permissions are not used by the system.
eb57338f
MK
112.TP
113.B SHM_HUGETLB
114Allocate the segment using "huge pages."
115See the kernel source file
116.I Documentation/vm/hugetlbpage.txt
117for further information.
fea681da 118.PP
c952e226
MK
119If a new shared memory segment is created,
120then its associated data structure
fea681da 121.I shmid_ds
c952e226
MK
122(see
123.BR shmctl (2))
124is initialised as follows:
fea681da 125.IP
c952e226 126.I shm_perm.cuid
fea681da 127and
c952e226 128.I shm_perm.uid
499d62f2 129are set to the effective user ID of the calling process.
fea681da 130.IP
c952e226 131.I shm_perm.cgid
fea681da 132and
c952e226 133.I shm_perm.gid
499d62f2 134are set to the effective group ID of the calling process.
fea681da 135.IP
c952e226
MK
136The least significant 9 bits of
137.I shm_perm.mode
138are set to the least significant 9 bit of
fea681da
MK
139.IR shmflg .
140.IP
c952e226 141.I shm_segsz
fea681da
MK
142is set to the value of
143.IR size .
144.IP
c952e226
MK
145.IR shm_lpid ,
146.IR shm_nattch ,
147.I shm_atime
fea681da 148and
c952e226
MK
149.I shm_dtime
150are set to 0.
fea681da 151.IP
c952e226 152.I shm_ctime
fea681da
MK
153is set to the current time.
154.PP
c952e226 155If the shared memory segment already exists, the permissions are
fea681da 156verified, and a check is made to see if it is marked for destruction.
fea681da
MK
157.SH "SYSTEM CALLS"
158.TP
c952e226 159.BR fork ()
fea681da 160After a
c952e226 161.BR fork ()
fea681da
MK
162the child inherits the attached shared memory segments.
163.TP
c952e226 164.BR exec ()
fea681da 165After an
c952e226 166.BR exec ()
fea681da
MK
167all attached shared memory segments are detached (not destroyed).
168.TP
c952e226 169.BR exit ()
fea681da 170Upon
c952e226 171.BR exit ()
fea681da
MK
172all attached shared memory segments are detached (not destroyed).
173.PP
174.SH "RETURN VALUE"
175A valid segment identifier,
176.IR shmid ,
177is returned on success, \-1 on error.
178.SH ERRORS
179On failure,
c952e226 180.I errno
fea681da
MK
181is set to one of the following:
182.TP 12
183.B EACCES
184The user does not have permission to access the
185shared memory segment, and does not have the
186.B CAP_IPC_OWNER
187capability.
188.TP
189.B EEXIST
190.B IPC_CREAT | IPC_EXCL
191was specified and the segment exists.
192.TP
fea681da
MK
193.B EINVAL
194A new segment was to be created and \fIsize\fP < \fBSHMMIN\fP
195or \fIsize\fP > \fBSHMMAX\fP, or no new segment was to be created,
196a segment with given key existed, but \fIsize\fP is greater than the size
197of that segment.
198.TP
199.B ENFILE
200.\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp()
201The system limit on the total number of open files has been reached.
202.TP
203.B ENOENT
204No segment exists for the given \fIkey\fP, and
205.B IPC_CREAT
206was not specified.
207.TP
208.B ENOMEM
209No memory could be allocated for segment overhead.
210.TP
211.B ENOSPC
357cf3fe 212All possible shared memory IDs have been taken
fea681da
MK
213.RB ( SHMMNI ),
214or allocating a segment of the requested
215.I size
216would cause the system to exceed the system-wide limit on shared memory
217.RB ( SHMALL ).
eb57338f
MK
218.TP
219.B EPERM
220The
221.B SHM_HUGETLB
222flag was specified, but the caller was not privileged (did not have the
223.B CAP_IPC_LOCK
224capability).
fea681da
MK
225.SH NOTES
226.B IPC_PRIVATE
227isn't a flag field but a
c952e226 228.I key_t
fea681da
MK
229type.
230If this special value is used for
231.IR key ,
c952e226 232the system call ignores everything but the least significant 9 bits of
fea681da
MK
233.I shmflg
234and creates a new shared memory segment (on success).
235.PP
540036b2 236The following limits on shared memory segment resources affect the
c952e226 237.BR shmget ()
fea681da
MK
238call:
239.TP 11
240.B SHMALL
c952e226
MK
241System wide maximum of shared memory pages
242(on Linux, this limit can be read and modified via
243.IR /proc/sys/kernel/shmall ).
fea681da
MK
244.TP
245.B SHMMAX
c952e226
MK
246Maximum size in bytes for a shared memory segment: policy dependent
247(on Linux, this limit can be read and modified via
248.IR /proc/sys/kernel/shmmax ).
fea681da
MK
249.TP
250.B SHMMIN
251Minimum size in bytes for a shared memory segment: implementation
252dependent (currently 1 byte, though
253.B PAGE_SIZE
254is the effective minimum size).
255.TP
256.B SHMMNI
257System wide maximum number of shared memory segments: implementation
c952e226
MK
258dependent (currently 4096, was 128 before Linux 2.3.99;
259on Linux, this limit can be read and modified via
260.IR /proc/sys/kernel/shmmni ).
261.\" This /proc file is not available in Linux 2.2 and earlier -- MTK
fea681da
MK
262.PP
263The implementation has no specific limits for the per process maximum
264number of shared memory segments
265.RB ( SHMSEG ).
266.SH BUGS
267The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW
268would more clearly show its function.
269.SH "CONFORMING TO"
270SVr4, SVID. SVr4 documents an additional error condition EEXIST.
271Until version 2.3.30 Linux would return EIDRM for a
c952e226 272.BR shmget ()
fea681da 273on a shared memory segment scheduled for deletion.
eb57338f
MK
274
275.B SHM_HUGETLB
276is a non-portable Linux extension.
fea681da
MK
277.SH "SEE ALSO"
278.BR shmat (2),
279.BR shmctl (2),
280.BR shmdt (2),
281.BR ftok (3),
282.BR ipc (5),
283.BR capabilities (7)