semop.2freebsd

Langue: en

Version: 265813 (debian - 07/07/09)

Section: 2 (Appels système)


BSD mandoc

NAME

semop - atomic array of operations on a semaphore set

LIBRARY

Lb libc

SYNOPSIS

In sys/types.h In sys/ipc.h In sys/sem.h Ft int Fn semop int semid struct sembuf *array size_t nops

DESCRIPTION

The Fn semop system call atomically performs the array of operations indicated by Fa array on the semaphore set indicated by Fa semid . The length of Fa array is indicated by Fa nops . Each operation is encoded in a Vt struct sembuf , which is defined as follows:
 struct sembuf {
         u_short sem_num;        /* semaphore # */
         short   sem_op;         /* semaphore operation */
         short   sem_flg;        /* operation flags */
 };
 

For each element in Fa array , sem_op and sem_flg determine an operation to be performed on semaphore number sem_num in the set. The values SEM_UNDO and IPC_NOWAIT may be OR 'ed into the sem_flg member in order to modify the behavior of the given operation.

The operation performed depends as follows on the value of sem_op

For each semaphore a process has in use, the kernel maintains an ``adjust on exit'' value, as alluded to earlier. When a process exits, either voluntarily or involuntarily, the adjust on exit value for each semaphore is added to the semaphore's value. This can be used to insure that a resource is released if a process terminates unexpectedly.

RETURN VALUES

Rv -std semop

ERRORS

The Fn semop system call will fail if:
Bq Er EINVAL
No semaphore set corresponds to Fa semid , or the process would exceed the system-defined limit for the number of per-process SEM_UNDO structures.
Bq Er EACCES
Permission denied due to mismatch between operation and mode of semaphore set.
Bq Er EAGAIN
The semaphore's value would have resulted in the process being put to sleep and IPC_NOWAIT was specified.
Bq Er E2BIG
Too many operations were specified. Bq Dv SEMOPM
Bq Er EFBIG
sem_num was not in the range of valid semaphores for the set.
Bq Er EIDRM
The semaphore set was removed from the system.
Bq Er EINTR
The Fn semop system call was interrupted by a signal.
Bq Er ENOSPC
The system SEM_UNDO pool Bq Dv SEMMNU is full.
Bq Er ERANGE
The requested operation would cause either the semaphore's current value Bq Dv SEMVMX or its adjust on exit value Bq Dv SEMAEM to exceed the system-imposed limits.

SEE ALSO

semctl(2), semget(2), sigaction(2)

BUGS

The Fn semop system call may block waiting for memory even if IPC_NOWAIT was specified.