Rechercher une page de manuel
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 setLIBRARY
Lb libcSYNOPSIS
In sys/types.h In sys/ipc.h In sys/sem.h Ft int Fn semop int semid struct sembuf *array size_t nopsDESCRIPTION
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
- When sem_op is positive and the process has alter permission, the semaphore's value is incremented by sem_op 's value. If SEM_UNDO is specified, the semaphore's adjust on exit value is decremented by sem_op 's value. A positive value for sem_op generally corresponds to a process releasing a resource associated with the semaphore.
- The behavior when sem_op is negative and the process has alter permission, depends on the current value of the semaphore:
- If the current value of the semaphore is greater than or equal to the absolute value of sem_op then the value is decremented by the absolute value of sem_op If SEM_UNDO is specified, the semaphore's adjust on exit value is incremented by the absolute value of sem_op
- If the current value of the semaphore is less than the absolute value of sem_op one of the following happens:
- If IPC_NOWAIT was specified, then Fn semop returns immediately with a return value of Er EAGAIN .
- Otherwise, the calling process is put to sleep until one of the following conditions is satisfied:
- Some other process removes the semaphore with the IPC_RMID option of semctl(2). In this case, Fn semop returns immediately with a return value of Er EIDRM .
- The process receives a signal that is to be caught. In this case, the process will resume execution as defined by sigaction(2).
- The semaphore's value is greater than or equal to the absolute value of sem_op When this condition becomes true, the semaphore's value is decremented by the absolute value of sem_op the semaphore's adjust on exit value is incremented by the absolute value of sem_op
A negative value for sem_op generally means that a process is waiting for a resource to become available.
- When sem_op is zero and the process has read permission, one of the following will occur:
- If the current value of the semaphore is equal to zero then Fn semop can return immediately.
- If IPC_NOWAIT was specified, then Fn semop returns immediately with a return value of Er EAGAIN .
- Otherwise, the calling process is put to sleep until one of the following conditions is satisfied:
- Some other process removes the semaphore with the IPC_RMID option of semctl(2). In this case, Fn semop returns immediately with a return value of Er EIDRM .
- The process receives a signal that is to be caught. In this case, the process will resume execution as defined by sigaction(2).
- The semaphore's value becomes zero.
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 semopERRORS
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.Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre