1SHMGET(2)                  Linux Programmer's Manual                 SHMGET(2)
2
3
4

NAME

6       shmget - allocates a System V shared memory segment
7

SYNOPSIS

9       #include <sys/ipc.h>
10       #include <sys/shm.h>
11
12       int shmget(key_t key, size_t size, int shmflg);
13

DESCRIPTION

15       shmget()  returns  the identifier of the System V shared memory segment
16       associated with the value of the argument key.  It may be  used  either
17       to  obtain the identifier of a previously created shared memory segment
18       (when shmflg is zero and key does not have the value  IPC_PRIVATE),  or
19       to create a new set.
20
21       A  new  shared  memory  segment,  with  size equal to the value of size
22       rounded up to a multiple of PAGE_SIZE, is created if key has the  value
23       IPC_PRIVATE  or  key isn't IPC_PRIVATE, no shared memory segment corre‐
24       sponding to key exists, and IPC_CREAT is specified in shmflg.
25
26       If shmflg specifies both IPC_CREAT and IPC_EXCL  and  a  shared  memory
27       segment  already  exists for key, then shmget() fails with errno set to
28       EEXIST.  (This is analogous to the effect of the combination O_CREAT  |
29       O_EXCL for open(2).)
30
31       The value shmflg is composed of:
32
33       IPC_CREAT   Create  a  new  segment.   If  this  flag is not used, then
34                   shmget() will find the  segment  associated  with  key  and
35                   check  to see if the user has permission to access the seg‐
36                   ment.
37
38       IPC_EXCL    This flag is used with IPC_CREAT to ensure that  this  call
39                   creates  the  segment.   If the segment already exists, the
40                   call fails.
41
42       SHM_HUGETLB (since Linux 2.6)
43                   Allocate the segment using "huge  pages."   See  the  Linux
44                   kernel  source  file  Documentation/admin-guide/mm/hugetlb‐
45                   page.rst for further information.
46
47       SHM_HUGE_2MB, SHM_HUGE_1GB (since Linux 3.8)
48                   Used in conjunction with SHM_HUGETLB to select  alternative
49                   hugetlb page sizes (respectively, 2 MB and 1 GB) on systems
50                   that support multiple hugetlb page sizes.
51
52                   More generally, the desired huge page size can  be  config‐
53                   ured  by  encoding the base-2 logarithm of the desired page
54                   size in the six bits at the offset  SHM_HUGE_SHIFT.   Thus,
55                   the above two constants are defined as:
56
57                       #define SHM_HUGE_2MB    (21 << SHM_HUGE_SHIFT)
58                       #define SHM_HUGE_1GB    (30 << SHM_HUGE_SHIFT)
59
60                   For some additional details, see the discussion of the sim‐
61                   ilarly named constants in mmap(2).
62
63       SHM_NORESERVE (since Linux 2.6.15)
64                   This flag serves the same purpose as the mmap(2)  MAP_NORE‐
65                   SERVE  flag.   Do  not reserve swap space for this segment.
66                   When swap space is reserved, one has the guarantee that  it
67                   is  possible to modify the segment.  When swap space is not
68                   reserved one might get SIGSEGV upon a write if no  physical
69                   memory  is  available.  See also the discussion of the file
70                   /proc/sys/vm/overcommit_memory in proc(5).
71
72       In addition to the above flags, the least significant 9 bits of  shmflg
73       specify the permissions granted to the owner, group, and others.  These
74       bits have the same format, and the same meaning, as the  mode  argument
75       of open(2).  Presently, execute permissions are not used by the system.
76
77       When  a new shared memory segment is created, its contents are initial‐
78       ized to zero values, and its associated data structure,  shmid_ds  (see
79       shmctl(2)), is initialized as follows:
80
81              shm_perm.cuid  and shm_perm.uid are set to the effective user ID
82              of the calling process.
83
84              shm_perm.cgid and shm_perm.gid are set to the effective group ID
85              of the calling process.
86
87              The  least  significant  9  bits of shm_perm.mode are set to the
88              least significant 9 bit of shmflg.
89
90              shm_segsz is set to the value of size.
91
92              shm_lpid, shm_nattch, shm_atime, and shm_dtime are set to 0.
93
94              shm_ctime is set to the current time.
95
96       If the shared memory segment already exists, the permissions are  veri‐
97       fied, and a check is made to see if it is marked for destruction.
98

RETURN VALUE

100       On success, a valid shared memory identifier is returned.  On error, -1
101       is returned, and errno is set to indicate the error.
102

ERRORS

104       On failure, errno is set to one of the following:
105
106       EACCES The user does not have permission to access  the  shared  memory
107              segment,  and  does not have the CAP_IPC_OWNER capability in the
108              user namespace that governs its IPC namespace.
109
110       EEXIST IPC_CREAT and IPC_EXCL were specified in shmflg,  but  a  shared
111              memory segment already exists for key.
112
113       EINVAL A  new segment was to be created and size is less than SHMMIN or
114              greater than SHMMAX.
115
116       EINVAL A segment for the given key exists, but size is greater than the
117              size of that segment.
118
119       ENFILE The system-wide limit on the total number of open files has been
120              reached.
121
122       ENOENT No segment exists for the given key, and IPC_CREAT was not spec‐
123              ified.
124
125       ENOMEM No memory could be allocated for segment overhead.
126
127       ENOSPC All  possible  shared  memory  IDs  have been taken (SHMMNI), or
128              allocating a segment of the requested size would cause the  sys‐
129              tem to exceed the system-wide limit on shared memory (SHMALL).
130
131       EPERM  The SHM_HUGETLB flag was specified, but the caller was not priv‐
132              ileged (did not have the CAP_IPC_LOCK capability).
133

CONFORMING TO

135       POSIX.1-2001, POSIX.1-2008, SVr4.
136
137       SHM_HUGETLB and SHM_NORESERVE are Linux extensions.
138

NOTES

140       The inclusion of <sys/types.h> and <sys/ipc.h> isn't required on  Linux
141       or by any version of POSIX.  However, some old implementations required
142       the inclusion of these header files, and the SVID also documented their
143       inclusion.   Applications  intended  to be portable to such old systems
144       may need to include these header files.
145
146       IPC_PRIVATE isn't a flag field but a key_t type.  If this special value
147       is  used for key, the system call ignores all but the least significant
148       9 bits of shmflg and creates a new shared memory segment.
149
150   Shared memory limits
151       The following limits on shared  memory  segment  resources  affect  the
152       shmget() call:
153
154       SHMALL System-wide limit on the total amount of shared memory, measured
155              in units of the system page size.
156
157              On Linux, this limit can be read and modified via /proc/sys/ker‐
158              nel/shmall.   Since Linux 3.16, the default value for this limit
159              is:
160
161                  ULONG_MAX - 2^24
162
163              The effect of this value (which is suitable for both 32-bit  and
164              64-bit systems) is to impose no limitation on allocations.  This
165              value, rather than ULONG_MAX, was chosen as the default to  pre‐
166              vent  some cases where historical applications simply raised the
167              existing limit without first checking its current  value.   Such
168              applications  would cause the value to overflow if the limit was
169              set at ULONG_MAX.
170
171              From Linux 2.4 up to Linux 3.15,  the  default  value  for  this
172              limit was:
173
174                  SHMMAX / PAGE_SIZE * (SHMMNI / 16)
175
176              If  SHMMAX  and  SHMMNI  were not modified, then multiplying the
177              result of this formula by the page  size  (to  get  a  value  in
178              bytes)  yielded a value of 8 GB as the limit on the total memory
179              used by all shared memory segments.
180
181       SHMMAX Maximum size in bytes for a shared memory segment.
182
183              On Linux, this limit can be read and modified via /proc/sys/ker‐
184              nel/shmmax.   Since Linux 3.16, the default value for this limit
185              is:
186
187                  ULONG_MAX - 2^24
188
189              The effect of this value (which is suitable for both 32-bit  and
190              64-bit  systems) is to impose no limitation on allocations.  See
191              the description of SHMALL for a discussion of why  this  default
192              value (rather than ULONG_MAX) is used.
193
194              From Linux 2.2 up to Linux 3.15, the default value of this limit
195              was 0x2000000 (32 MB).
196
197              Because it is not possible to map just part of a  shared  memory
198              segment,  the  amount  of virtual memory places another limit on
199              the maximum size of a usable segment: for example, on  i386  the
200              largest  segments  that  can  be  mapped  have  a size of around
201              2.8 GB, and on x86-64 the limit is around 127 TB.
202
203       SHMMIN Minimum size in bytes for a shared memory  segment:  implementa‐
204              tion dependent (currently 1 byte, though PAGE_SIZE is the effec‐
205              tive minimum size).
206
207       SHMMNI System-wide limit on the number of shared memory  segments.   In
208              Linux 2.2, the default value for this limit was 128; since Linux
209              2.4, the default value is 4096.
210
211              On Linux, this limit can be read and modified via /proc/sys/ker‐
212              nel/shmmni.
213
214       The  implementation  has no specific limits for the per-process maximum
215       number of shared memory segments (SHMSEG).
216
217   Linux notes
218       Until version 2.3.30, Linux would return EIDRM  for  a  shmget()  on  a
219       shared memory segment scheduled for deletion.
220

BUGS

222       The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW would more
223       clearly show its function.
224

SEE ALSO

226       memfd_create(2),  shmat(2),  shmctl(2),  shmdt(2),  ftok(3),  capabili‐
227       ties(7), shm_overview(7), sysvipc(7)
228

COLOPHON

230       This  page  is  part of release 5.04 of the Linux man-pages project.  A
231       description of the project, information about reporting bugs,  and  the
232       latest     version     of     this    page,    can    be    found    at
233       https://www.kernel.org/doc/man-pages/.
234
235
236
237Linux                             2019-08-02                         SHMGET(2)
Impressum