shmctl(S)
shmctl --
shared memory control operations
Syntax
cc . . . -lc
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
Description
The shmctl system call
provides a variety of shared memory control operations as specified by
cmd.
The following cmds are available:
IPC_RMID-
Remove the shared memory identifier specified by shmid
from the system and destroy the shared memory segment and data structure
associated with it.
This cmd can only be executed by a process that has an effective user
ID equal to that of super user, or to the value of
shm_perm.cuid
or shm_perm.uid
in the data structure associated with shmid.
IPC_SET-
Set the value of the following members of the data structure associated with
shmid
to the corresponding value found in the structure pointed to by
buf:
shm_perm.uid
shm_perm.gid
shm_perm.mode /* only low 9 bits */
This cmd can only be executed by a process that has an effective user
ID equal to that of super user, or to the value of
shm_perm.cuid
or shm_perm.uid
in the data structure associated with shmid.
IPC_STAT-
Place the current value of each member of the data structure associated with
shmid into the structure pointed to by buf.
SHM_LOCK-
Lock the shared memory segment specified by shmid in memory.
This cmd can only be executed by a process that has an effective user
ID equal to super user.
SHM_UNLOCK-
Unlock the shared memory segment specified by shmid.
This cmd can only be executed by a process that has an effective user
ID equal to super user.
Return value
Upon successful completion, a value of 0 is returned. Otherwise, a
value of -1 is returned, and errno
is set to indicate the error.
Diagnostics
The shmctl system call fails if one or more of the following is true:
[EACCES]-
cmd is equal to IPC_STAT and {READ}
operation permission is denied to the calling process.
[EFAULT]-
buf points to an illegal address.
[EINVAL]-
shmid is not a valid shared memory identifier.
[EINVAL]-
cmd is not a valid command.
[ENOMEM]-
cmd is equal to SHM_LOCK,
and there is not enough memory.
[ENOSYS]-
The functionality is not supported on this implementation.
[EOVERFLOW]-
cmd is IPC_STAT, and uid or
gid is too large to be stored in the structure
pointed to by buf
[EPERM]-
cmd is equal to IPC_RMID or
IPC_SET, and the effective user ID
of the calling process is not equal to that of super user or
to the value of
shm_perm.cuid
or
shm_perm.uid
in the data structure associated with shmid.
[EPERM]-
cmd is equal to SHM_LOCK or
SHM_UNLOCK, and the effective user
ID of the calling process is not equal to that of super user.
Notes
The user must explicitly remove shared memory segments
after the last reference to them has been removed.
See also
shmget(S),
shmop(S)
Standards conformance
shmctl is conformant with:
X/Open Portability Guide, Issue 3, 1989
.
© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003