shmctl(2) CLIX shmctl(2)
NAME
shmctl - Shared memory control operations
LIBRARY
Standard C Library (libc.a)
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(
int shmid ,
int cmd ,
struct shmid_ds *buf );
PARAMETERS
shmid Specifies a shared memory segment identifier obtained from a
successful call to the shmget() function.
cmd Specifies a memory control operation.
buf Points to the data structure where control operations are to find
or put data.
DESCRIPTION
The shmctl() function provides a variety of shared memory control
operations as specified by cmd . The following cmds are available:
IPC_STAT Places the current value of each member of the data structure
associated with shmid into the structure pointed to by buf.
The contents of this structure are defined in intro(2).
IPC_SET Sets 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 superuser, or to the value
2/94 - Intergraph Corporation 1
shmctl(2) CLIX shmctl(2)
of shm_perm.cuid or shm_perm.uid in the data structure
associated with shmid.
IPC_RMID Removes the shared memory identifier specified by shmid from
the system and destroys 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
superuser, or to the value of shm_perm.cuid or shm_perm.uid
in the data structure associated with shmid.
SHM_LOCK Locks 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 superuser.
SHM_UNLOCK Unlocks the shared memory segment specified by shmid. This
cmd can only be executed by a process that has an effective
user ID equal to superuser.
EXAMPLES
1. To set the mode of a shared memory segment to be read/write for the
owner:
struct shmid_ds buf;
buf.shm_perm.mode = 0600;
if (shmctl(shmid, IPC_SET, &buf) < 0)
perror("IPC_STAT failed");
2. To remove a shared memory segment:
int shmid;
if (shmctl(shmid, IPC_RMID, (struct shmid_ds *)0) < 0)
perror("Could not remove shared memory");
NOTES
The user must explicitly remove shared memory segments after the last
reference to them has been removed.
RETURN VALUES
Upon successful completion, a value of 0 is returned. Otherwise, a value
of -1 is returned and errno is set to indicate the error.
ERRORS
The shmctl() function fails if one or more of the following are true:
2 Intergraph Corporation - 2/94
shmctl(2) CLIX shmctl(2)
[EINVAL] The value of shmid is not a valid shared memory identifier.
[EINVAL] The value of cmd is not a valid command.
[EACCES] The value of cmd is equal to IPC_STAT and operation permission
is denied to the calling process. (See intro().)
[EPERM] The value of cmd is equal to IPC_RMID or IPC_SET and the
effective user of the calling process is not equal to that of
superuser, or to the value of shm_perm.cuid or shm_perm.uid in
the data structure associated with shmid.
[EPERM] The value of cmd is equal to SHM_LOCK or SHM_UNLOCK and the
effective user of the calling process is not equal to that of
superuser.
[EFAULT] The value of buf is a pointer to an illegal address.
[ENOMEM] The value of cmd is equal to SHM_LOCK and there is not enough
memory.
RELATED INFORMATION
Functions: shmget(2), shmop(2)
2/94 - Intergraph Corporation 3