SEMOP
Section: System Calls (2)
Updated: 21 November 1987
Index
Return to Main Contents
NAME
semop - semaphore operations
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semop(semid, sops, nsops)
int semid;
struct sembuf *sops;
int nsops;
DESCRIPTION
semop()
is used to atomically perform an array of semaphore operations on the
set of semaphores associated with the semaphore identifier specified by
semid.
sops
is a pointer to the array of semaphore-operation structures.
nsops
is the number of such structures in the array.
The contents of each structure includes the following members:
-
short sem_num; /* semaphore number */
short sem_op; /* semaphore operation */
short sem_flg; /* operation flags */
Each semaphore operation specified by
sem_op
is performed on the corresponding semaphore specified by
semid
and
sem_num.
sem_op
specifies one of three semaphore operations as follows:
-
If
sem_op
is a negative integer, one of the following will occur:
{ALTER}
- *
-
If
semval
(see
intro(2))
is greater than or equal to the absolute value of
sem_op,
the absolute value of
sem_op
is subtracted from
semval.
- *
-
If
semval
is less than the absolute value of
sem_op
and
(sem_flg &
IPC_NOWAIT)
is ``true'',
semop()
will return immediately.
- *
-
If
semval
is less than the absolute value of
sem_op
and
(sem_flg &
IPC_NOWAIT)
is ``false'',
semop()
will increment the
semncnt
associated with the specified semaphore
and suspend execution of the calling process
until one of the following conditions occur.
-
semval
becomes greater than or equal to the absolute value of
sem_op.
When this occurs, the value of
semncnt
associated with the specified
semaphore is decremented, the absolute value of
sem_op
is subtracted from
semval .
The
semid
for which the calling process is awaiting action
is removed from the system (see
semctl(2)).
When this occurs,
errno
is set equal to
EIDRM,
and a value of -1 is returned.
The calling process receives a signal.
When this occurs, the value of
semncnt
associated with the specified
semaphore is decremented,
and the calling process resumes execution in the manner prescribed in
signal(2).
If
sem_op
is a positive integer, the value of
sem_op
is added to
semval .
{ALTER}
If
sem_op
is zero,
one of the following will occur:
{READ}
- *
-
If
semval
is zero,
semop()
will return immediately.
- *
-
If
semval
is not equal to zero and
(sem_flg &
IPC_NOWAIT)
is ``true'',
semop()
will return immediately.
- *
-
If
semval
is not equal to zero and
(sem_flg &
IPC_NOWAIT)
is ``false'',
semop()
will increment the
semzcnt
associated with the specified semaphore
and suspend execution of the calling process until
one of the following occurs:
-
semval
becomes zero, at which time the value of
semzcnt
associated with the
specified semaphore is decremented.
The
semid
for which the calling process is awaiting action
is removed from the system.
When this occurs,
errno
is set equal to
EIDRM,
and a value of -1 is returned.
The calling process receives a signal that is to be caught.
When this occurs, the value of
semzcnt
associated with the specified semaphore is decremented,
and the calling process resumes execution in the manner prescribed in
signal(2).
Upon successful completion, the value of
sempid
for each semaphore specified in the array pointed to by
sops
is set equal to the process
ID
of the calling process.
RETURN VALUE
Upon successful completion, the value of
semval
at the time of the call for the
last operation in the array pointed to by
sops
is returned.
Otherwise, a value of -1 is returned and
errno
is set to indicate the error.
ERRORS
semop()
will fail if one or more of the following are true for any of the semaphore
operations specified by
sops:
- EINVAL
-
semid
is not a valid semaphore identifier.
- EIDRM
-
The set of semaphores referred to by
msqid
was removed from the system.
- EFBIG
-
sem_num
is less than zero or greater than or equal to the number of semaphores
in the set associated with
semid.
- E2BIG
-
nsops
is greater than the system-imposed maximum.
- EACCES
-
Operation permission is denied to the calling process (see
intro(2)).
- EAGAIN
-
The operation would result in suspension of the calling process but
(sem_flg &
IPC_NOWAIT)
is ``true''.
- ERANGE
-
An operation would cause a
semval
value to overflow the system-imposed limit.
- EFAULT
-
sops
points to an illegal address.
- EINTR
-
The call was interrupted by the delivery of a signal.
SEE ALSO
exec(2),
exit(2),
fork(2),
intro(2),
semctl(2),
semget(2),
signal(2)
BUGS
The SEM_UNDO function is not implemented.
Semaphores always exit with EINTR when a signal is received. The signal
cannot be caught inside the semaphore.
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- SEE ALSO
-
- BUGS
-
This document was created by
man2html,
using the manual pages.
Time: 04:51:41 GMT, January 31, 2023