shmget(S-osr5)
shmget --
get shared memory segment identifier
Syntax
cc  . . .  -lc
#include  <sys/shm.h>
int shmget (key_t key, size_t size, int shmflg);
Description
The shmget system call
returns the shared memory identifier associated with
key.
A shared memory identifier and associated data structure and shared memory
segment of at least size bytes are created for
key if one of the following is true:
- 
key is equal to IPC_PRIVATE.
 - 
key
does not already have a shared memory identifier associated with it, and
(shmflg & IPC_CREAT) is ``true''.
 
Upon creation, the data structure associated with the new shared memory
identifier is initialized as follows:
- 
shm_perm.cuid, shm_perm.uid,
shm_perm.cgid, and shm_perm.gid
are set equal to the effective user ID
and effective group ID,
respectively, of the calling process.
 - 
The low-order 9 bits of shm_perm.mode
are set equal to the low-order 9 bits of shmflg.
shm_segsz is set equal to the value of size.
 - 
shm_lpid, shm_nattch,
shm_atime, and shm_dtime
are set equal to 0.
 - 
shm_ctime is set equal to the current time.
 
Return value
Upon successful completion, a non-negative integer,
namely a shared memory identifier is returned.
Otherwise, a value of -1 is returned, and
errno is set to indicate the error.
Diagnostics
The shmget system call fails if one or more of the following is true:
[EACCES]- 
A shared memory identifier exists for key,
but operation permission (see
Intro(S-osr5))
as specified by the low-order 9 bits of shmflg
would not be granted.
 
[EEXIST]- 
A shared memory identifier exists for key
but (shmflg & IPC_CREAT) and
(shmflg & IPC_EXCL)
are ``true''.
 
[EINVAL]- 
size is less than the system-imposed minimum
or greater than the system-imposed maximum.
 
[EINVAL]- 
A shared memory identifier exists for key,
but the size of the segment associated with it is less than
size, and size is not equal to zero.
 
[ENOENT]- 
A shared memory identifier does not exist for
key, and (shmflg & IPC_CREAT)
is ``false''.
 
[ENOMEM]- 
A shared memory identifier and associated shared memory segment are to be
created, but the amount of available memory is not sufficient to
fill the request.
 
[ENOSPC]- 
A shared memory identifier is to be created, but
the system-imposed limit on the maximum number of
allowed shared memory identifiers system wide
would be exceeded.
 
[ENOSYS]- 
The functionality is not supported on this implementation.
 
Notes
The user must explicitly remove shared memory segments
after the last reference to them has been removed.
See also
shmctl(S-osr5),
shmop(S-osr5)
Standards conformance
shmget is conformant with:
X/Open Portability Guide, Issue 3, 1989
.
© 2005 The SCO Group, Inc.  All rights reserved.
SCO OpenServer Release 6.0.0 -- 02 June 2005