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