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 - Semaphor-Operationen

SYNTAX
     #include <sys/sem.h>

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

BESCHREIBUNG
     semop() wird zur automatischen Ausführung einer Reihe von Semaphor-
     Operationen in der zur Semaphor-Kennung gehörenden Semaphor-Menge ver-
     wendet, die durch semid angegeben wird. sops ist ein Zeiger auf das
     Feld der Strukturen für die Semaphor-Operationen.

     nsops ist die Anzahl dieser Strukturen in dem Feld. Jede Struktur hat
     folgende Elemente:

          ushortt semnum;        /* Semaphor-Nr. */
          short semop;            /* Semaphor-Operation */
          short semflg;           /* Schalter für die Operation */

     Jede durch semop angegebene Semaphor-Operation wird auf dem entspre-
     chenden Semaphor ausgeführt, welches durch semid und semnum angegeben
     ist.

     semop gibt eine von drei Semaphor-Operationen wie folgt an (abhängig
     davon, ob sein Wert negativ, positiv oder Null ist):

     Wenn semop eine negative ganze Zahl ist, läuft einer der nachstehen-
     den Vorgänge ab:

     ⊕ Wenn der Wert des Semaphors semval größer oder gleich dem
       absoluten Wert von semop ist, wird der absolute Wert von semop von
       semval subtrahiert. Wenn (semflg&SEMUNDO) wahr ist, wird außerdem
       der absolute Wert von semop zum semadj-Wert des aufrufenden Prozes-
       ses [siehe exit (2)] für das angegebene Semaphor addiert.

     ⊕  Wenn semval kleiner als der absolute Wert von semop und
        (semflg&IPCNOWAIT) wahr ist, kehrt semop() sofort zurück.

     ⊕  Wenn semval kleiner als der absolute Wert von semop und
        (semflg&IPCNOWAIT) unwahr ist, erhöht semop() das zum angegebenen
        Semaphor gehörende semncnt und hält die Ausführung des aufrufenden
        Prozesses an, bis eine der nachstehenden Bedingungen eintrifft:

        -  semval wird größer oder gleich dem absoluten Wert von semop.
           Wenn dies eintritt, wird der Wert des zum angegebenen Semaphor
           gehörenden semncnt verringert, der absolute Wert von semop wird
           von semval subtrahiert und - wenn (semflg&SEMUNDO) wahr ist -
           wird der absolute Wert von semop zum semad-Wert des aufrufenden
           Prozesses für das angegebene Semaphor addiert.




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

semop(2)                                                           semop(2)

        -  Das semid, für das der aufrufende Prozeß Maßnahmen erwartet,
           wird aus dem System entfernt [siehe semctl(2)]. Wenn dies ein-
           tritt, wird errno auf EIDRM gesetzt und -1 zurückgegeben.

        -  Der aufrufende Prozeß erhält ein Signal, das abgefangen werden
           soll. Wenn dies geschieht, wird der Wert des zum angegebenen
           Semaphor gehörenden semncnt verringert, und der aufrufende Pro-
           zeß nimmt die Ausführung in der in signal(2) beschriebenen Weise
           wieder auf.

     Wenn semop eine positive ganze Zahl ist, wird der Wert von semop zu
     semval addiert, und wenn (semflg&SEMUNDO) wahr ist, wird der Wert
     von semop vom semadj-Wert des aufrufenden Prozesses für das angege-
     bene Semaphor subtrahiert.

     Wenn semop Null ist, läuft einer der folgenden Vorgänge ab:

     ⊕  Wenn semval Null ist, kehrt semop() sofort zurück.

     ⊕  Wenn semval ungleich Null ist und (semflg&IPCNOWAIT) wahr ist,
        kehrt semop() sofort zurück.

     ⊕  Wenn semval ungleich Null ist und (semflg&IPCNOWAIT) unwahr ist,
        erhöht semop() das zum angegebenen Semaphor gehörige semzcnt und
        hält die Ausführung des aufrufenden Prozesses an, bis einer der
        folgenden Fälle eintrifft:

        -  semval wird Null. Zu diesem Zeitpunkt wird der Wert des zum
           angegebenen Semaphor gehörenden semzcnt verringert.

        -  Das semid, für das der aufrufende Prozeß Maßnahmen erwartet,
           wird aus dem System entfernt. Wenn dies geschieht, wird errno
           auf EIDRM gesetzt und -1 zurückgegeben.

        -  Der aufrufende Prozeß empfängt ein Signal, das abgefangen werden
           soll. Wenn dies geschieht, wird der Wert des zum angegebenen
           Semaphor gehörenden semzcnt verringert, und der aufrufende Pro-
           zeß nimmt die Ausführung in der in signal(2) beschriebenen Weise
           wieder auf.

     semop() ist erfolglos, wenn einer oder mehrere der nachstehenden
     Punkte für eine der durch sops angegebenen Semaphor-Operationen
     zutreffen:

     EINVAL    semid ist keine gültige Semaphor-Kennung.

     EFBIG     semnum ist kleiner als Null oder größer als bzw. gleich der
               Anzahl der Semaphoren in der zu semid gehörenden Semaphor-
               Menge.

     E2BIG     sops ist größer als das systembedingte Maximum.



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

semop(2)                                                           semop(2)

     EACCES    Die Zugriffserlaubnis wird dem aufrufenden Prozeß verwei-
               gert.

     EAGAIN    Der aufrufende Prozeß wird angehalten wird, obwohl
               (semflg&IPCNOWAIT) wahr ist.

     ENOSPC    Der zulässige Grenzwert für die Anzahl einzelner Prozesse,
               die ein SEMUNDO anfordern, wird überschritten.

     EINVAL    Die Anzahl individueller Semaphoren, für die der aufrufende
               Prozeß ein SEMUNDO anfordert, wird den Grenzwert über-
               schreiten.

     ERANGE    semval überschreitet den systembedingten Grenzwert.

     ERANGE    Der semadj-Wert überschreitet den systembedingten Grenzwert.

     EFAULT    sops weist auf eine ungültige Adresse.

     Nach erfolgreicher Beendigung wird der Wert von sempid für jedes Sema-
     phor in dem Feld, auf das sops zeigt, auf die Prozeßnummer des aufru-
     fenden Prozesses gesetzt.

ERGEBNIS
     Wenn semop() infolge des Empfangs eines Signals zurückkehrt, wird -1
     an den aufrufenden Prozeß zurückgegeben, und errno wird auf EINTR
     gesetzt. Kehrt es infolge der Entfernung eines semid zurück, wird -1
     zurückgegeben und errno auf EIDRM gesetzt.

     Nach erfolgreicher Beendigung wird 0 zurückgegeben. Andernfalls wird
     -1 zurückgegeben, und errno wird zur Anzeige des Fehlers gesetzt.

HINWEISE
     Es kann in Zukunft Änderungen bei den Schnittstellen für Interprozeß-
     Kommunikation geben. Sie sollten daher Ihre Anwendungen so gestalten,
     daß in Modulen, die semop() verwenden, diese Funktion später leicht
     durch eine andere ersetzt werden kann.

SIEHE AUCH
     exec(2), exit(2), fork(2), semctl(2), semget(2), sem(5).














Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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