semctl() COHERENT System Call semctl()
Control semaphore operations
#include <sys/sem.h>
semctl(semid, semnum, cmd, arg)
int semid, cmd, semnum;
union semun {
int val;
struct semid_ds *buf;
unsigned short array[];
} arg;
semctl controls a variety of semaphore operations. cmd sets the
operation to be performed; the following cmds are executed with
respect to the semaphore specified by semid and semnum:
GETVAL
Return the value of semval (READ).
SETVAL
Set the value of semval to arg.val (ALTER).
GETPID
Return the value of sempid (READ).
GETNCNT
Return the value of semncnt (READ).
GETZCNT
Return the value of semzcnt (READ).
The following cmds return and set, respectively, every semval in
the set of semaphores.
GETALL Place semvals into array pointed to by arg.array
(READ).
SETALL Set semvals according to the array pointed to by
arg.array (ALTER).
The following cmds are also available:
IPC_STAT Place the current value of each member of the data
structure associated with semid into the structure
pointed to by arg.buf (READ).
IPC_SET Set the value of the following members of the data
structure associated with semid to the corresponding
value found in the structure pointed to by arg.buf:
sem_perm.uid
sem_perm.gid
sem_perm.mode /* only low 9 bits */
This command can only be executed by a process that has
COHERENT Lexicon Page 1
semctl() COHERENT System Call semctl()
an effective user identifier equal to either that of
superuser or to the value of sem_perm.uid in the data
structure associated with semid.
IPC_RMID Remove the system identifier specified by semid from
the system and destroy the set of semaphores and data
structure associated with it. This cmd can only be ex-
ecuted by a process that has an effective user iden-
tifier equal to either that of super user or to the
value of sem_perm.uid in the data structure associated
with semid.
semctl will fail if one or more of the following are true:
* semid is not a valid semaphore identifier [EINVAL].
* semnum is less than zero or greater than sem_nsems [EINVAL].
* cmd is not a valid command [EINVAL].
* Operation permission is denied to the calling process.
[EACCES]
* cmd is SETVAL or SETALL and the value to which semval is to be
set is greater than the system imposed maximum [ERANGE].
* cmd is equal to IPC_RMID or IPC_SET and the effective user
identifier of the calling process is not equal to that of su-
peruser and it is not equal to the value of sem_perm.uid in
the data structure associated with semid [EPERM].
* arg.buf points to an illegal address [EFAULT].
***** Return Value *****
Upon successful completion, the value returned depends on cmd as
follows:
GETVAL The value of semval.
GETPID The value of sempid.
GETNCNT The value of semncnt.
GETZCNT The value of semzcnt.
All othersZero
Otherwise, semctl returns -1 and sets errno to an appropriate
value.
***** Files *****
/usr/include/sys/ipc.h
/usr/include/sys/sem.h
/dev/sem
/drv/sem
COHERENT Lexicon Page 2
semctl() COHERENT System Call semctl()
***** See Also *****
COHERENT system calls, sem, semget(), semop()
***** Notes *****
To improve portability, the COHERENT system implements the
semaphore functions as a device driver rather than as an actual
system call.
COHERENT Lexicon Page 3