semctl(2)
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}
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.
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 by 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 by 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:
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)
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004