Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ semop(2) — svr4 — mips UMIPS RISC/os 5.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(2)

exec(2)

exit(2)

fork(2)

semctl(2)

semget(2)



SEMOP(2-SVR4)       RISC/os Reference Manual        SEMOP(2-SVR4)



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   sem_num;    /* semaphore number */
          short   sem_op;     /* semaphore operation */
          short   sem_flg;    /* 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&SEM_UNDO) 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&IPC_NOWAIT) is true, semop returns immedi-
          ately.

          If semval is less than the absolute value of sem_op and
          (sem_flg&IPC_NOWAIT) 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



                        Printed 11/19/92                   Page 1





SEMOP(2-SVR4)       RISC/os Reference Manual        SEMOP(2-SVR4)



             decremented, the absolute value of sem_op is sub-
             tracted from semval and, if (sem_flg&SEM_UNDO) 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&SEM_UNDO) 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&IPC_NOWAIT)
          is true, semop returns immediately.

          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 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:




 Page 2                 Printed 11/19/92





SEMOP(2-SVR4)       RISC/os Reference Manual        SEMOP(2-SVR4)



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

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

     EINVAL         The number of individual semaphores for which
                    the calling process requests a SEM_UNDO 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.







                        Printed 11/19/92                   Page 3



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