DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

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