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