HP-UX Reference (11i v2 07/12) - 2 System Calls (vol 5)
s
semop(2) semop(2)
If semval is not equal to zero and (sem_flg &
IPC_NOWAIT ) is ‘‘true’’,
semop() returns immedi-
ately.
If semval is not equal to zero and (sem_flg &
IPC_NOWAIT ) is ‘‘false’’,
semop() increments the
semzcnt associated with the specified semaphore and suspends 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 sema-
phore 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(5).
semtimedop() is identical to semop() except that an additional constraint is provided by the timeout
parameter. If
semtimedop() must suspend the calling process longer than the time indicated by
timeout, or if the timeout expires while the calling process is suspended in
semtimedop() , the call
returns an error.
If the structure pointed to by the timeout parameter is zero-valued,
semtimedop() returns with an
error immediately if it would otherwise have to suspend the calling program.
If the timeout parameter is the NULL pointer, semtimedop() behaves exactly like semop().
EXAMPLES
The following call to
semop() atomically performs a "P" or "get" operation on the second semaphore in
the semaphore set and a "V" or "release" operation on the third semaphore in the set. This example
assumes the process has a valid semid which represents a set of 4 semaphores as shown on the semget (2)
manual page. It also assumes that the semvals of the semaphores in the set have been initialized as shown
in the semctl(2) manual entry.
struct sembuf sops[4];
sops[0].sem_num = 1;
sops[0].sem_op = -1; /* P (get) */
sops[0].sem_flg = 0;
sops[1].sem_num = 2;
sops[1].sem_op = 1; /* V (release) */
sops[1].sem_flg = 0;
semop (mysemid, sops, 2);
RETURN VALUE
If semop() or semtimedop() returns due to the receipt of a signal, a value of -1
is returned to the
calling process and
errno is set to [EINTR]. If it returns due to the removal of a semid from the system,
a value of
-1 is returned and errno is set to [EIDRM].
Upon successful completion, a non-negative value is returned. Otherwise, a value of -1 is returned and
errno is set to indicate the error.
ERRORS
semop() fails if one or more of the following is true for any of the semaphore operations specified by sops:
[EINVAL] semid is not a valid semaphore identifier.
[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 glossary(9)).
[EAGAIN] The operation would result in suspension of the calling process but (sem_flg &
IPC_NOWAIT ) is ‘‘true’’.
[ENOSPC] The limit on the number of individual processes requesting an SEM_UNDO would be
exceeded.
HP-UX 11i Version 2: December 2007 Update − 2 − Hewlett-Packard Company 357