semctl(2) semctl(2)
NAME
semctl - semaphore control operations
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
union semun {
int val;
struct semid_ds *buf;
ushort *array;
};
int semctl(int semid, int semnum, int cmd, . . . /* union semun arg */);
DESCRIPTION
semctl provides a variety of semaphore control operations as
specified by cmd.
The following cmds are executed with respect to the semaphore
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 command is successfully executed, the
semadj value corresponding to the specified
semaphore in all processes is cleared.
GETPID Return the value of (int) 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}. When this cmd is
successfully executed, the semadj values
corresponding to each specified semaphore in all
processes are cleared.
Copyright 1994 Novell, Inc. Page 1
semctl(2) semctl(2)
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. 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 structure pointed
to by arg.buf:
sem_perm.uid
sem_perm.gid
sem_perm.mode /* only access permission bits */
This command can be executed only by a process
that has an effective user ID equal to the value
of sem_perm.cuid or sem_perm.uid in the data
structure associated with semid or to a process
that has the P_OWNER privilege.
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
command can be executed only by a process that has
an effective user ID equal to the value of
sem_perm.cuid or sem_perm.uid in the data
structure associated with semid or to a process
that has the P_OWNER privilege.
Return Values
On success, semctl returns a value that depends on cmd:
GETVAL the value of semval
GETPID the value of (int) sempid
GETNCNT the value of semncnt
GETZCNT the value of semzcnt
all others
a value of 0
On failure, semctl returns -1 and sets errno to identify the
error.
Errors
In the following conditions, semctl fails and sets errno to:
Copyright 1994 Novell, Inc. Page 2
semctl(2) semctl(2)
EACCES Operation permission is denied to the calling
process [see intro(2)].
EINVAL semid is not a valid semaphore identifier.
EINVAL semnum is less than 0 or greater than
sem_nsems.
EINVAL cmd is not a valid command.
EINVAL cmd is IPC_SET and sem_perm.uid or sem_perm.gid
is not valid.
EOVERFLOW cmd is IPC_STAT and uid or gid is too large to
be stored in the structure pointed to by
arg.buf.
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 the value of sem_perm.cuid or
sem_perm.uid in the data structure associated
with semid and the calling process does not
have P_OWNER privilege.
EFAULT arg.buf points to an illegal address.
REFERENCES
intro(2), semget(2), semop(2)
Copyright 1994 Novell, Inc. Page 3