*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> semop (2)              



NAME    [Toc]    [Back]

     semop - semaphore operations

SYNOPSIS    [Toc]    [Back]

     #include <sys/types.h>
     #include <sys/ipc.h>
     #include <sys/sem.h>

     semop(int semid, struct sembuf *sops, size_t nsops);

DESCRIPTION    [Toc]    [Back]

     semop() provides a number of atomic operations on a  set  of
     The  semaphore  set is specified by semid.  sops is an array
of semaphore
     operations, nsops is the number of operations in this array.
The sembuf
     structures in the array contain the following members:

             u_short sem_num;        /* semaphore # */
             short   sem_op;         /* semaphore operation */
             short   sem_flg;        /* operation flags */

     Each operation (specified in sem_op) is applied to semaphore
     sem_num in the set of semaphores specified  by  semid.   The
value of sem_op
     determines the action taken in the following way:

     +o    sem_op  is less than 0.  The current process is blocked
until the value
 of the semaphore is greater than or equal to the  absolute value of
         sem_op.  The absolute value of sem_op is then subtracted
from the
         value of the semaphore, and the calling process  continues.  Negative
         values  of  sem_op  are  thus used to enter critical regions.

     +o   sem_op is greater than 0.  Its value  is  added  to  the
value of the
         specified semaphore.  This is used to leave critical regions.

     +o   sem_op is equal to 0.  The calling  process  is  blocked
until the value
         of the specified semaphore reaches 0.

     The  behavior  of  each operation is influenced by the flags
set in sem_flg
     in the following way:

     IPC_NOWAIT   In the case where  the  calling  process  would
normally block,
                  waiting for a semaphore to reach a certain value, IPC_NOWAIT
                  makes the call return immediately, returning  a
value of -1
                  and setting errno to EAGAIN.

     SEM_UNDO      Keep track of the changes that this call makes
to the value
                  of a semaphore, so that they can be undone when
the calling
                  process  terminates.  This is useful to prevent
other processes
 waiting on a semaphore to block forever,
should the
                  process that has the semaphore locked terminate
in a critical

RETURN VALUES    [Toc]    [Back]

     Upon successful completion, a value of 0 is returned.   Otherwise, -1 is
     returned  and  the  global variable errno is set to indicate
the error.

ERRORS    [Toc]    [Back]

     semop() will fail if:

     [EINVAL]      There is no semaphore associated with semid.

                   The semaphore set was removed while  the  process was waiting
                   for  one  of its semaphores to reach a certain

     [EACCES]      The calling process has no permission  to  access the specified
 semaphore set.

     [E2BIG]       The value of nsops is too big.  The maximum is
specified in
                   MAX_SOPS in <sys/sem.h>.

     [EFBIG]       sem_num in one of the  sem_buf  structures  is
less than 0, or
                   greater  than  the actual number of semaphores
in the set
                   specified by semid.

     [ENOSPC]      SEM_UNDO  was  requested,  and  there  is  not
enough space left
                   in the kernel to store the undo information.

     [EAGAIN]      The requested operation can not immediately be
                   and IPC_NOWAIT was set in sem_flg.

     [EFAULT]      sops points to an illegal address.

SEE ALSO    [Toc]    [Back]

     semctl(2), semget(2)

BUGS    [Toc]    [Back]

     In case of a removed semaphore identifier, errno  should  be
set to EIDRM,
     but OpenBSD does not define this error.

OpenBSD      3.6                          August     17,     1995
[ Back ]
 Similar pages
Name OS Title
semop Tru64 Perform semaphore operations
semctl OpenBSD semaphore control operations
semctl FreeBSD control operations on a semaphore set
sem_close FreeBSD named semaphore operations
sem_unlink FreeBSD named semaphore operations
semctl NetBSD semaphore control operations
usctlsema IRIX semaphore control operations
sem_unlink OpenBSD named semaphore operations
semctl HP-UX semaphore control operations
semctl IRIX semaphore control operations
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service