Datei sem.h

Zweck

Beschreibt die Strukturen, die von Subroutinen verwendet werden, die Semaphoroperationen ausführen.

Beschreibung

Die Datei /usr/include/sys/sem.h definiert die Strukturen, die von der Subroutine semop und der Subroutine semctl verwendet werden, um verschiedene Semaphoroperationen auszuführen.

Die Struktur SEM speichert die Werte, die der Parameter Befehle der Subroutine Semctl abruft und festlegt. Diese Struktur enthält die folgenden Felder:

Element Beschreibung
semval Gibt die Operationsberechtigungsstruktur eines Semaphors an. Der Datentyp dieses Felds ist 'unsigned short'.
sempid Gibt den letzten Prozess an, der eine Semop -Subroutine ausgeführt hat. Der Datentyp dieses Felds ist pid_t.
semncnt Gibt die Anzahl der Prozesse an, die wartensemval > cval. Der Datentyp dieses Felds ist 'unsigned short'.
semzcnt Gibt die Anzahl der Prozesse an, die wartensemval= 0. Der Datentyp dieses Felds ist 'unsigned short'.

Die Struktur Sembuf speichert Semaphorinformationen, die von der Subroutine Semop verwendet werden. Diese Struktur enthält die folgenden Felder:

sem_num
Gibt ein Semaphor an, für das eine Semaphoroperation ausgeführt werden soll Der Datentyp dieses Felds ist 'unsigned short'.
sem_op
Gibt eine Semaphor-Operation an, die für das Semaphor ausgeführt werden soll, das von dersem_numund den Parameter SemaphoreID der Subroutine semop . Dieser Wert kann eine positive ganze Zahl, eine negative ganze Zahl oder 0 sein:
I
Wenn der aktuelle Prozess über Schreibberechtigung verfügt, wird der positive ganzzahlige Wert dieses Felds zum Wert dessemvalFeld des Semaphors.
- I
Wenn der aktuelle Prozess Schreibberechtigung hat, führt ein negativer ganzzahliger Wert in diesem Feld zu einer der folgenden Aktionen:

Wenn dassemvaFeld l ist größer oder gleich dem absoluten Wert dessem_opFeld, der absolute Wert dessem_opFeld wird vom Wert dersemvalerlaubt.

Wenn dassemvalFeld ist kleiner als der absolute Wert dessem_opFeld und das IPC_NOWAIT -Flag gesetzt ist, gibt die Subroutine semop den Wert zurück -1 und setzt die globale Variable errno auf EAGAIN.

Wenn der Wert dessemvalFeld ist kleiner als der absolute Wert dessem_opWenn das Flag IPC_NOWAIT nicht gesetzt ist, erhöht die Subroutine Semop diesemncntFeld, das dem angegebenen Semaphor zugeordnet ist und die Ausführung des aufrufenden Prozesses aussetzt, bis eine der folgenden Bedingungen erfüllt ist:

  • Der Wert dessemvalFeld größer oder gleich dem absoluten Wert dersem_operlaubt. In diesem Fall wird der Wert dersemncntvield, das dem angegebenen Semaphor zugeordnet ist, wird dekrementiert, der absolute Wert dessem_opFeld wird subtrahiert vonsemvalWert und, wenn das Flag ZURÜCKGÄNGIGMACHEN in dersem_flgFeld, der absolute Wert dessem_opwird dem Wert SemadjCity in Jam des aufrufenden Prozesses für das angegebene Semaphor hinzugefügt.
  • Das mit dem Parameter SemaphoreID angegebene Semaphor, für das der aufrufende Prozess auf eine Aktion wartet, wird aus dem System entfernt (siehe Subroutine semctl ). In diesem Fall wird die globale Variable errno auf EIDRM gesetzt und der Wert -1 zurückgegeben.
  • Der aufrufende Prozess empfängt ein Signal, das abgefangen werden soll. In diesem Fall wird der Wert dersemncntFeld, das dem angegebenen Semaphor zugeordnet ist, wird verringert, und der aufrufende Prozess nimmt die Ausführung in der in der Subroutine Berechtigungsaktion vorgeschriebenen Weise wieder auf.
0
Wenn der aktuelle Prozess über Leseberechtigung verfügt, führt der Wert 0 in diesem Feld zu einer der folgenden Aktionen:
  • Wenn dassemvalFeld ist 0, gibt die Subroutine Semop den Wert 0 zurück.
  • Wenn dassemvalWenn das Feld ungleich 0 ist und das IPC_NOWAIT -Flag gesetzt ist, gibt die Semop -Subroutine den Wert zurück -1 und setzt die globale Variable errno auf EAGAIN.
  • Wennsemvalist ungleich 0 und das Flag IPC_NOWAIT ist nicht gesetzt, erhöht die Subroutine Semop diesemzcntFeld, das dem angegebenen Semaphor zugeordnet ist und die Ausführung des aufrufenden Prozesses aussetzt, bis eine der folgenden Bedingungen erfüllt ist:
    • Der Wert dessemvalFeld wird zu 0, wobei der Wert dersemzcntFeld, das dem angegebenen Semaphor zugeordnet ist, wird verringert.
    • Das durch den Parameter SemaphoreID angegebene Semaphor, für das der aufrufende Prozess auf eine Aktion wartet, wird aus dem System entfernt. In diesem Fall wird die globale Variable errno auf EIDRM gesetzt und der Wert -1 zurückgegeben.
    • Der aufrufende Prozess empfängt ein Signal, das abgefangen werden soll. In diesem Fall wird der Wert dersemzcntFeld, das dem angegebenen Semaphor zugeordnet ist, wird verringert, und der aufrufende Prozess nimmt die Ausführung in der in der Subroutine Berechtigungsaktion vorgeschriebenen Weise wieder auf.

Der Datentyp dersem_opFeld ist kurz.

sem_flg
Wenn der Wert dieses Felds für eine Operation nicht 0 ist, wird der Wert durch logisches Verknüpfen eines oder mehrerer der folgenden Werte mit OR erstellt:
ZURÜCKGÄNGIGMACHEN
Gibt an, ob die SemadjCity in Jam -Werte des aufrufenden Prozesses geändert werden sollen.

Wenn dieser Wert für eine Operation und den Wert dersem_opFeld ist eine positive ganze Zahl, der Wert dersem_opwird vom Wert SemadjCity in Jam des aufrufenden Prozesses subtrahiert.

Wenn dieser Wert für eine Operation und den Wert dersem_opFeld ist eine negative ganze Zahl, der absolute Wert dessem_opwird dem Wert SemadjCity in Jam des aufrufenden Prozesses hinzugefügt. Die Subroutine Exit fügt den Wert SemadjCity in Jam zum Wert dersemvalFeld des Semaphors, wenn der Prozess beendet wird.

SEM_ORDER
Gibt an, ob die im Array SemaphoreOperations der Subroutine semop angegebenen Operationen atomar oder einzeln ausgeführt werden sollen. (Dieses Flag ist nur gültig, wenn es im Parameter SemaphoreOperations [0]. sem_flg enthalten ist, der ersten Operation im SemaphoreOperations Array.)

Wenn das Flag SEM_ORDER nicht gesetzt ist (Standardeinstellung) werden die angegebenen Operationen atomar ausgeführt. Das heißt, keine dersemvalWerte im Array werden geändert, bis alle Semaphoroperationen abgeschlossen sind. Wenn der aufrufende Prozess warten muss, bis einigesemvalVoraussetzung ist, dass die Subroutine Semop dies tut, bevor eine der Operationen ausgeführt wird. Wenn eine Semaphoroperation einen Fehler verursachen würde, wird keine der Operationen ausgeführt.

Wenn das Flag SEM_ORDER gesetzt ist, werden die Operationen einzeln in der Reihenfolge ausgeführt, in der sie im Array angezeigt werden, unabhängig davon, ob für eine der Operationen der Prozess warten muss. Wenn eine Operation eine Fehlerbedingung feststellt, setzt die Subroutine Semop das Flag SEM_ERR in dersem_flgFeld der fehlgeschlagenen Operation; weder die fehlgeschlagene Operation noch die folgenden Operationen im Array werden ausgeführt.

IPC_NOWAIT
Gibt an, ob sofort gewartet oder zurückgegeben werden soll, wenn diesemvaleines Semaphors ist kein bestimmter Wert.

Der Datentyp dersem_flgFeld ist kurz.

Die Struktur Semid_ds speichert Semaphorstatusinformationen, die von der Subroutine Semctl verwendet werden und auf die durch den Parameter Puffer verwiesen wird. Diese Struktur enthält die folgenden Felder:

Element Beschreibung
sem_perm Gibt die Operationsberechtigungsstruktur eines Semaphors an. Der Datentyp dieses Felds ist struct Ipc_perm.
sem_nsems Gibt die Anzahl der Semaphore in der Gruppe an Der Datentyp dieses Felds ist 'unsigned short'.
sem_otime Gibt die Uhrzeit an, zu der eine Semop -Subroutine zuletzt ausgeführt wurde. Der Datentyp dieses Felds ist Zeit_t.
sem_ctime Gibt die Zeit an, zu der diese Struktur zuletzt mit einer Semctl -Subroutine geändert wurde. Der Datentyp dieses Felds ist Zeit_t.