Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ semop(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

exit(2)

fork(2)

semctl(2)

semget(2)

sem(5)

semop(2)                                                           semop(2)

NAME
     semop - semaphore operations

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

          ushortt semnum;        /* semaphore number */
          short semop;            /* semaphore operation */
          short semflg;           /* operation flags */

     Each semaphore operation specified by semop is performed on the cor-
     responding semaphore specified by semid and semnum.

     semop specifies one of three semaphore operations as follows, depend-
     ing on whether its value is negative, positive, or zero:

     If semop is a negative integer, one of the following occurs:

     ⊕  If the value of the semaphore semval is greater than or equal to
        the absolute value of semop, the absolute value of semop is sub-
        tracted from semval. Also, if (semflg&SEMUNDO) is true, the abso-
        lute value of semop is added to the calling process' semadj value
        [see exit(2)] for the specified semaphore.

     ⊕  If semval is less than the absolute value of semop and
        (semflg&IPCNOWAIT) is true, semop() returns immediately.

     ⊕  If semval is less than the absolute value of semop and
        (semflg&IPCNOWAIT) is false, semop() increments the semncnt asso-
        ciated with the specified semaphore and suspends execution of the
        calling process until one of the following conditions occurs:

        -  semval becomes greater than or equal to the absolute value of
           semop. When this occurs, the value of semncnt associated with
           the specified semaphore is decremented, the absolute value of
           semop is subtracted from semval and, if (semflg&SEMUNDO) is
           true, the absolute value of semop is added to the calling pro-
           cess' 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.




Page 1                       Reliant UNIX 5.44                Printed 11/98

semop(2)                                                           semop(2)

        -  The calling process receives a signal that is to be caught. When
           this occurs, the value of semncnt associated with the specified
           semaphore is decremented, and the calling process resumes execu-
           tion in the manner prescribed in signal(2).

     If semop is a positive integer, the value of semop is added to
     semval and, if (semflg&SEMUNDO) is true, the value of semop is sub-
     tracted from the calling process' semadj value for the specified sema-
     phore.

     If semop is zero, one of the following occurs:

     ⊕  If semval is zero, semop() returns immediately.

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

     ⊕  If semval is not equal to zero and (semflg&IPCNOWAIT) is false,
        semop() increments the semzcnt associated with the specified sema-
        phore and suspends execution of the calling process until one of
        the following occurs:

        -  semval becomes zero, at which time the value of semzcnt associ-
           ated 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 decremented, and the calling process resumes execu-
           tion in the manner prescribed in signal(2).

     semop() fails if one or more of the following apply for any of the
     semaphore operations specified by sops:

     EINVAL   semid is not a valid semaphore identifier.

     EFBIG    semnum 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 maximum.

     EACCES   Operation permission is denied to the calling process.









Page 2                       Reliant UNIX 5.44                Printed 11/98

semop(2)                                                           semop(2)

     EAGAIN   The operation would result in suspension of the calling pro-
              cess but (semflg&IPCNOWAIT) is true.

     ENOSPC   The limit on the number of individual processes requesting an
              SEMUNDO has been exceeded.

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

     ERANGE   semval exceeds the system-imposed limit.

     ERANGE   The semadj value exceeds 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.

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

NOTES
     In the future there may be modifications to the interfaces for inter-
     process communication. You should design your applications so that in
     modules using semop() this function can easily be replaced by others.

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



















Page 3                       Reliant UNIX 5.44                Printed 11/98

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