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