Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

semget(2)

semop(2)

semctl(2)                                                         semctl(2)

NAME
     semctl - Semaphor-Steuerfunktionen

SYNTAX
     #include <sys/sem.h>

     int semctl(int semid, int semnum, int cmd, ... );

BESCHREIBUNG
     semctl() stellt eine Vielzahl von Semaphor-Steuerfunktionen zur Verfü-
     gung, die durch cmd angegeben werden.

     Nachstehende Kommandos können als cmd übergeben werden. Die Kommandos
     beziehen sich auf das durch semid und semnum angegebene Semaphor:

     GETVAL      Rückgabe des Wertes von semval

     SETVAL      den Wert von semval auf den Wert des vierten Arguments
                 (int) setzen. Wenn dieses Kommando erfolgreich ausgeführt
                 wurde, wird der semadj-Wert, der zu dem angegebenen Sema-
                 phor gehört, in allen Prozessen gelöscht.

     GETPID      Rückgabe des Wertes von (int) sempid

     GETNCNT     Rückgabe des Wertes von semncnt

     GETZCNT     Rückgabe des Wertes von semzcnt

     Mit den folgenden Kommandos wird jeder semval in der Semaphor-Menge
     zurückgegeben bzw. gesetzt:

     GETALL      semval zurückgeben und in das Feld vom Typ unsigned short
                 schreiben, auf das das vierte Argument von semctl() zeigt.
                 Leseerlaubnis wird benötigt.

     SETALL      semval auf den Wert des Feldes vom Typ unsigned short set-
                 zen, auf das das vierte Argument von semctl() zeigt. Nach
                 erfolgreicher Ausführung dieses Kommandos werden die
                 semadj-Werte, die zu jedem angegebenen Semaphor gehören,
                 in allen Prozessen gelöscht. Schreiberlaubnis wird benö-
                 tigt.

     Folgende Kommandos sind ebenfalls verfügbar:

     IPCSTAT    den aktuellen Wert jedes Elements der semidds Datenstruk-
                 tur, die zu semid gehört, in die semidds Struktur schrei-
                 ben, auf die das vierte Argument von semctl() zeigt.

     IPCSET     den Wert der folgenden Elemente der semidds Datenstruk-
                 tur, die zu semid gehört, auf den entsprechenden Wert set-
                 zen, der in der semidds Struktur gefunden wurde, auf die
                 das vierte Argument von semctl() zeigt:



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

semctl(2)                                                         semctl(2)

                 semperm.uid
                 semperm.gid
                 semperm.mode      /* nur Zugangsberechtigungsbits */

                 Dieses Kommando kann nur von einem Prozeß ausgeführt wer-
                 den, der eine effektive Benutzernummer aufweist, die ent-
                 weder gleich der des Systemverwalters oder dem Wert von
                 semperm.cuid oder semperm.uid in der zu semid gehörenden
                 Datenstruktur ist.

     IPCRMID    Die durch semid angegebene Semaphor-Kennung und die zuge-
                 hörige Semaphor-Menge und Datenstruktur werden vom System
                 entfernt. Dieses Kommando kann nur von einem Prozeß ausge-
                 führt werden, der eine effektive Benutzernummer aufweist,
                 die entweder gleich der des Systemverwalters oder dem Wert
                 von semperm.cuid oder semperm.uid in der zu semid gehö-
                 renden Datenstruktur ist.

     semctl() scheitert, wenn einer oder mehrere der folgenden Punkte
     zutreffen:

     EACCES      Dem aufrufenden Prozeß wird die Ausführungserlaubnis ver-
                 weigert.

     EINVAL      semid ist keine gültige Semaphor-Kennung.

     EINVAL      semnum ist kleiner als 0 oder größer als semnsems.

     EINVAL      cmd ist kein gültiges Kommando.

     EINVAL      cmd ist IPCSET, und semperm.uid oder semperm.gid ist
                 nicht gültig.

     EOVERFLOW   cmd ist IPCSTAT, und uid oder gid ist zu groß, um in der
                 Struktur gespeichert zu werden, auf die das vierte Argu-
                 ment von semctl() zeigt.

     ERANGE      cmd ist SETVAL oder SETALL, und der Wert, auf den semval
                 gesetzt werden soll, ist größer als der systembedingte
                 zulässige Maximalwert.

     EPERM       cmd ist gleich IPCRMID oder IPCSET, und die effektive
                 Benutzer-ID des aufrufenden Prozesses ist nicht gleich der
                 des Systemverwalters oder dem Wert von semperm.cuid oder
                 semperm.uid in der Datenstruktur, die zu semid gehört.

     EFAULT      Das vierte Argument zeigt auf eine ungültige Adresse.







Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

semctl(2)                                                         semctl(2)

ERGEBNIS
     Bei erfolgreicher Beendigung hängt der Rückgabewert folgendermaßen von
     cmd ab:

     GETVAL      Wert von semval

     GETPID      Wert von (int) sempid

     GETNCNT     Wert von semncnt

     GETZCNT     Wert von semzcnt

     alle anderen
                 Wert 0

     Sonst wird -1 zurückgegeben, und errno wird gesetzt, um den Fehler
     anzuzeigen.

HINWEISE
     Das vierte Argument der semctl()-Aufrufs kann wie folgt definiert wer-
     den:

     union semun {
          long val;
          struct semidds *buf;
          unsigned short *array;
     } arg;

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

SIEHE AUCH
     semget(2), semop(2).



















Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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