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 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. {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 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.
{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 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.
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 following is true:
[EACCES]
Operation permission is denied to the calling process.
[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.
[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.
[ERANGE]
cmd is SETVAL or SETALL
and the value to which semval is to be set is greater than
the system imposed maximum.
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.