]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/shmget.2
ffix
[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.
c13182ef 11.\"
fea681da
MK
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.
c13182ef 19.\"
fea681da
MK
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.\"
d9343c5c 36.TH SHMGET 2 2006-05-02 "Linux" "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>
fea681da
MK
42.B #include <sys/shm.h>
43.sp
f7174672 44.BI "int shmget(key_t " key ", size_t " size ", int " shmflg );
fea681da
MK
45.ad b
46.SH DESCRIPTION
c952e226 47.BR shmget ()
fea681da
MK
48returns the identifier of the shared memory segment
49associated with the value of the argument
50.IR key .
51A new shared memory segment, with size equal to the value of
52.I size
53rounded up to a multiple of
54.BR PAGE_SIZE ,
55is created if
56.I key
57has the value
58.B IPC_PRIVATE
59or
60.I key
61isn't
62.BR IPC_PRIVATE ,
63no shared memory segment corresponding to
64.IR key
65exists, and
66.B IPC_CREAT
c952e226
MK
67is specified in
68.IR shmflg .
69.PP
70If
fea681da 71.I shmflg
c952e226
MK
72specifies both
73.B IPC_CREAT
74and
75.B IPC_EXCL
76and a shared memory segment already exists for
77.IR key ,
78then
79.BR shmget ()
c13182ef 80fails with
c952e226
MK
81.I errno
82set to
83.BR EEXIST .
c13182ef 84(This is analogous to the effect of the combination
c952e226
MK
85.B O_CREAT | O_EXCL
86for
87.BR open (2).)
fea681da
MK
88.PP
89The value
90.I shmflg
91is composed of:
92.TP 12
93.B IPC_CREAT
c13182ef
MK
94to create a new segment.
95If this flag is not used, then
c952e226 96.BR shmget ()
c13182ef 97will find the segment associated with \fIkey\fP and check to see if
fea681da
MK
98the user has permission to access the segment.
99.TP
100.B IPC_EXCL
c13182ef 101used with \fBIPC_CREAT\fP to ensure failure if the segment already exists.
fea681da 102.TP
c13182ef 103.I mode_flags
c952e226 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 112.TP
32047971 113.BR SHM_HUGETLB " (since Linux 2.6)"
c13182ef 114Allocate the segment using "huge pages."
eb57338f
MK
115See the kernel source file
116.I Documentation/vm/hugetlbpage.txt
117for further information.
32047971
MK
118.TP
119.BR SHM_NORESERVE " (since Linux 2.6.15)"
120This flag serves the same purpose as the
121.BR mmap (2)
122.B MAP_NORESERVE
123flag.
c13182ef 124Do not reserve swap space for this segment.
32047971
MK
125When swap space is reserved, one has the guarantee
126that it is possible to modify the segment.
8bd58774
MK
127When swap space is not reserved one might get
128.B SIGSEGV
129upon a write
32047971
MK
130if no physical memory is available.
131See also the discussion of the file
132.I /proc/sys/vm/overcommit_memory
c13182ef 133in
defcceb3 134.BR proc (5).
32047971
MK
135.\" As at 2.6.17-rc2, this flag has no effect if SHM_HUGETLB was also
136.\" specified.
fea681da 137.PP
6319e935 138When a new shared memory segment is created,
d9bfdb9c 139its contents are initialized to zero values, and
6319e935 140its associated data structure,
fea681da 141.I shmid_ds
c952e226 142(see
6319e935 143.BR shmctl (2)),
d9bfdb9c 144is initialized as follows:
fea681da 145.IP
c952e226 146.I shm_perm.cuid
fea681da 147and
c952e226 148.I shm_perm.uid
499d62f2 149are set to the effective user ID of the calling process.
fea681da 150.IP
c952e226 151.I shm_perm.cgid
fea681da 152and
c952e226 153.I shm_perm.gid
499d62f2 154are set to the effective group ID of the calling process.
fea681da 155.IP
c952e226
MK
156The least significant 9 bits of
157.I shm_perm.mode
158are set to the least significant 9 bit of
fea681da
MK
159.IR shmflg .
160.IP
c952e226 161.I shm_segsz
fea681da
MK
162is set to the value of
163.IR size .
164.IP
c952e226
MK
165.IR shm_lpid ,
166.IR shm_nattch ,
167.I shm_atime
fea681da 168and
c952e226
MK
169.I shm_dtime
170are set to 0.
fea681da 171.IP
c952e226 172.I shm_ctime
fea681da
MK
173is set to the current time.
174.PP
c952e226 175If the shared memory segment already exists, the permissions are
fea681da 176verified, and a check is made to see if it is marked for destruction.
fea681da
MK
177.SH "RETURN VALUE"
178A valid segment identifier,
179.IR shmid ,
180is returned on success, \-1 on error.
181.SH ERRORS
182On failure,
c952e226 183.I errno
fea681da
MK
184is set to one of the following:
185.TP 12
186.B EACCES
c13182ef 187The user does not have permission to access the
fea681da
MK
188shared memory segment, and does not have the
189.B CAP_IPC_OWNER
190capability.
191.TP
192.B EEXIST
193.B IPC_CREAT | IPC_EXCL
194was specified and the segment exists.
195.TP
fea681da
MK
196.B EINVAL
197A new segment was to be created and \fIsize\fP < \fBSHMMIN\fP
198or \fIsize\fP > \fBSHMMAX\fP, or no new segment was to be created,
199a segment with given key existed, but \fIsize\fP is greater than the size
200of that segment.
201.TP
202.B ENFILE
203.\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp()
204The system limit on the total number of open files has been reached.
205.TP
206.B ENOENT
207No segment exists for the given \fIkey\fP, and
208.B IPC_CREAT
209was not specified.
210.TP
211.B ENOMEM
212No memory could be allocated for segment overhead.
213.TP
214.B ENOSPC
357cf3fe 215All possible shared memory IDs have been taken
fea681da
MK
216.RB ( SHMMNI ),
217or allocating a segment of the requested
218.I size
219would cause the system to exceed the system-wide limit on shared memory
220.RB ( SHMALL ).
eb57338f
MK
221.TP
222.B EPERM
223The
224.B SHM_HUGETLB
225flag was specified, but the caller was not privileged (did not have the
226.B CAP_IPC_LOCK
227capability).
a1d5f77c
MK
228.SH "CONFORMING TO"
229SVr4, POSIX.1-2001.
230.\" SVr4 documents an additional error condition EEXIST.
231
232.B SHM_HUGETLB
233is a non-portable Linux extension.
fea681da
MK
234.SH NOTES
235.B IPC_PRIVATE
236isn't a flag field but a
c952e226 237.I key_t
fea681da
MK
238type.
239If this special value is used for
240.IR key ,
c952e226 241the system call ignores everything but the least significant 9 bits of
fea681da
MK
242.I shmflg
243and creates a new shared memory segment (on success).
244.PP
540036b2 245The following limits on shared memory segment resources affect the
c952e226 246.BR shmget ()
fea681da
MK
247call:
248.TP 11
249.B SHMALL
c952e226
MK
250System wide maximum of shared memory pages
251(on Linux, this limit can be read and modified via
252.IR /proc/sys/kernel/shmall ).
fea681da
MK
253.TP
254.B SHMMAX
c952e226
MK
255Maximum size in bytes for a shared memory segment: policy dependent
256(on Linux, this limit can be read and modified via
257.IR /proc/sys/kernel/shmmax ).
fea681da
MK
258.TP
259.B SHMMIN
260Minimum size in bytes for a shared memory segment: implementation
261dependent (currently 1 byte, though
262.B PAGE_SIZE
263is the effective minimum size).
264.TP
265.B SHMMNI
266System wide maximum number of shared memory segments: implementation
c952e226
MK
267dependent (currently 4096, was 128 before Linux 2.3.99;
268on Linux, this limit can be read and modified via
269.IR /proc/sys/kernel/shmmni ).
ed978af2 270.\" Kernels between 2.4.x and 2.6.8 had an off-by-one error that meant
cd31a0d6 271.\" that we could create one more segment than SHMMNI -- MTK
c952e226 272.\" This /proc file is not available in Linux 2.2 and earlier -- MTK
fea681da
MK
273.PP
274The implementation has no specific limits for the per process maximum
275number of shared memory segments
276.RB ( SHMSEG ).
4fb31341
MK
277.SS Linux Notes
278Until version 2.3.30 Linux would return EIDRM for a
279.BR shmget ()
280on a shared memory segment scheduled for deletion.
fea681da
MK
281.SH BUGS
282The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW
283would more clearly show its function.
fea681da
MK
284.SH "SEE ALSO"
285.BR shmat (2),
286.BR shmctl (2),
287.BR shmdt (2),
288.BR ftok (3),
92243659 289.BR capabilities (7),
2c5e151c 290.BR svipc (7)