Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ semop(2) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(2)

exec(2)

exit(2)

fork(2)

semctl(2)

semget(2)



semop(2)                  SYSTEM CALLS                   semop(2)



NAME
     semop - semaphore operations

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

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

DESCRIPTION
     semop is used to perform atomically 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   semnum;    /* semaphore number */
          short   semop;     /* semaphore operation */
          short   semflg;    /* 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  fol-
     lows,  depending on whether its value is negative, positive,
     or zero:

     If sem_op is  a  negative  integer,  one  of  the  following
     occurs:  {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.    Also,   if
          (sem_flg&SEMUNDO)  is  true,  the  absolute  value  of
          sem_op is added to the calling process's  semadj  value
          [see exit(2)] for the specified semaphore.

          If semval is less than the absolute value of sem_op and
          (sem_flg&IPCNOWAIT)  is  true,  semop  returns immedi-
          ately.

          If semval is less than the absolute value of sem_op and
          (sem_flg&IPCNOWAIT)  is  false,  semop  increments the
          semncnt associated with  the  specified  semaphore  and
          suspends  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



                                                                1





semop(2)                  SYSTEM CALLS                   semop(2)



             decremented,  the  absolute  value of sem_op is sub-
             tracted from semval and,  if  (sem_flg&SEMUNDO)  is
             true,  the  absolute value of sem_op is added to the
             calling process's semadj  value  for  the  specified
             semaphore.

             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 that is to  be
             caught.   When  this  occurs,  the  value of semncnt
             associated with the specified  semaphore  is  decre-
             mented, 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  and,  if  (sem_flg&SEMUNDO) is true, the
     value of sem_op is subtracted  from  the  calling  process's
     semadj value for the specified semaphore.  {ALTER}

     If sem_op is zero, one of the following occurs:  {READ}

          If semval is zero, semop returns immediately.

          If semval is not equal to zero and (sem_flg&IPCNOWAIT)
          is true, semop returns immediately.

          If semval is not equal to zero and (sem_flg&IPCNOWAIT)
          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 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  decre-
             mented, and the calling process resumes execution in
             the manner prescribed in signal(2).

     semop fails if one or more of the following are true for any
     of the semaphore operations specified by sops:




                                                                2





semop(2)                  SYSTEM CALLS                   semop(2)



     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 max-
                    imum.

     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&IPCNOWAIT)
                    is true.

     ENOSPC         The  limit  on  the  number   of   individual
                    processes  requesting  an  SEMUNDO  would be
                    exceeded.

     EINVAL         The number of individual semaphores for which
                    the calling process requests a SEMUNDO would
                    exceed the limit.

     ERANGE         An operation would cause a semval to overflow
                    the system-imposed limit.

     ERANGE         An operation would cause a  semadj  value  to
                    overflow the system-imposed limit.

     EFAULT         sops points to an illegal address.

     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.

SEE ALSO
     intro(2), exec(2), exit(2), fork(2), semctl(2), semget(2).

DIAGNOSTICS
     If semop 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 value  of  zero  is  returned.
     Otherwise,  a  value  of  -1 is returned and errno is set to
     indicate the error.







                                                                3



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026