SEMCTL(2) INTERACTIVE UNIX System SEMCTL(2)
NAME
semctl - semaphore control operations
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semctl (semid, semnum, cmd, arg)
int semid, cmd;
int semnum;
union semun {
int val;
struct semid_ds *buf;
ushort *array;
} arg;
DESCRIPTION
The semctl system call provides a variety of semaphore con-
trol operations as specified by cmd.
The following cmds are executed with respect to the sema-
phore specified by semid and semnum:
GETVAL Return the value of semval [see intro(2)].
{READ}
SETVAL Set the value of semval to arg.val. {ALTER}
When this cmd is successfully executed, the
semadj value corresponding to the specified
semaphore in all processes is cleared.
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 sem-
val 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} When this cmd is
successfully executed the semadj values
corresponding to each specified semaphore in
all processes are cleared.
The following cmds are also available:
IPC_STAT Place the current value of each member of
Rev. C Software Development Set Page 1
SEMCTL(2) INTERACTIVE UNIX System SEMCTL(2)
the data structure associated with semid
into the structure pointed to by arg.buf.
The contents of this structure are defined
in intro(2). {READ}
IPC_SET Set the value of the following members of
the data structure associated with semid to
the corresponding value found in the struc-
ture pointed to by arg.buf:
sem_perm.uid
sem_perm.gid
sem_perm.mode /* only low 9 bits */
This cmdf1 can only be executed by a process
that has an effective user ID equal to
either that of super-user, or to the value
of sem_perm.cuid or sem_perm.uid in the data
structure associated with semid.
IPC_RMID Remove the semaphore identifier specified by
semid from the system and destroy the set of
semaphores and data structure associated
with it. This cmd can only be executed by a
process that has an effective user ID equal
to either that of super-user, or to the
value of sem_perm.cuid or sem_perm.uid in
the data structure associated with semid.
The semctl system call fails if one or more of the fol-
lowing is true:
[EINVAL] 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.
[EACCES] Operation permission is denied to the cal-
ling process [see intro(2)].
[ERANGE] Cmd is SETVAL or SETALL and the value to
which semval is to be set is greater than
the system imposed maximum.
[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 sem_perm.cuid or sem_perm.uid in
the data structure associated with semid.
[EFAULT] Arg.buf points to an illegal address.
Rev. C Software Development Set Page 2
SEMCTL(2) INTERACTIVE UNIX System SEMCTL(2)
SEE ALSO
intro(2), semget(2), semop(2).
DIAGNOSTICS
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 others
A value of 0.
Otherwise, a value of -1 is returned, and errno is set to
indicate the error.
Rev. C Software Development Set Page 3