Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigstack(3) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

fork(2)

sigaltstack(2)

signal(2)

sigvec(3)

signal(3-ucb)

setjmp(3C)

sigsetjmp(3C)

signal(5)

sigstack(3)             (BSD Compatibility Package)             sigstack(3)

NAME
     sigstack - Kontext des Signal-Stack angeben und/oder abrufen

SYNTAX
     /usr/ucb/cc [flag ...] file ... -lucb

     #include <signal.h>

     int sigstack(struct sigstack *ss, struct sigstack *oss);

BESCHREIBUNG
     Mit sigstack können Benutzer einen anderen Stack (Stapelspeicher)
     definieren, der als Signal-Stack bezeichnet wird und in dem die Sig-
     nale verarbeitet werden. Wenn durch die Aktion eines Signals angezeigt
     wird, daß die Bearbeitungsroutine in einem Signal-Stack ausgeführt
     werden soll [angegeben mit einem Aufruf von sigvec(3)], prüft das
     System, ob der Prozeß derzeit in diesem Stack ausgeführt wird. Wird
     der Prozeß nicht im Signal-Stack ausgeführt, schaltet das System so
     lange in den Signal-Stack um, bis die Routine zur Signalbehandlung
     beendet ist.

     Ein Signal-Stack wird durch eine sigstack-Struktur angegeben, die fol-
     gende Elemente enthält:

          char    *sssp;           /* Zeiger auf den Signal-Stack */
          int     ssonstack;       /* aktueller Status */

     sssp ist der Ausgangswert (Basis), der dem Stack-Zeiger zugeordnet
     wird, wenn das System in den Signal-Stack umschaltet. Beachten Sie,
     daß auf Systemen, auf denen die Stack-Adresse mit der Speicheradresse
     wächst, dies nicht die Adresse vom Anfang des Signal-Stack-Bereichs
     ist. Das Feld ssonstack ist Null oder ungleich Null, je nachdem, ob
     der Prozeß derzeit im Signal-Stack oder in einem anderen Stack ausge-
     führt wird.

     Ist ss kein NULL-Zeiger, setzt sigstack den Status des Signal-Stacks
     auf den Wert in der sigstack-Struktur, auf den ss zeigt. Ist
     ssonstack nicht Null, geht das System davon aus, daß der Prozeß im
     Signal-Stack ausgeführt wird. Ist ss ein NULL-Zeiger, bleibt der Sta-
     tus des Signal-Stacks unverändert. Ist oss kein NULL-Zeiger, wird der
     aktuelle Status des Signal-Stacks in der sigstack-Struktur gespei-
     chert, auf die oss zeigt.

     Nach erfolgreichem Aufruf einer der exec-Funktionen enthält die neue
     Prozeßabbildung keine alternativen Signal-Stacks mehr.

RÜCKGABEWERT
     Bei erfolgreicher Ausführung wird der Wert 0 zurückgegeben. Andern-
     falls wird der Wert -1 zurückgegeben und errno gesetzt, um den Fehler
     anzuzeigen.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

sigstack(3)             (BSD Compatibility Package)             sigstack(3)

DIAGNOSE
     Bei folgender Bedingung schlägt sigstack fehl, und der Kontext des
     Signal-Stacks bleibt unverändert:

     EFAULT    Entweder ss oder oss zeigt auf Speicher, der für den Adreß-
               bereich des Prozesses nicht gültig ist.

     EPERM     Es wurde versucht, einen alternativen Stack zu ändern.

HINWEISE
     Signal-Stacks werden nicht automatisch vergrößert, wie dies bei norma-
     len Stacks der Fall ist. Wenn der Signal-Stack überläuft, können daher
     unerwartete Ergebnisse auftreten.

     Wenn eine portierbare Anwendung geschrieben oder neu geschrieben wird,
     sollte die Funktion sigaltstack() anstelle von sigstack() verwendet
     werden.

     Bei einigen Implementierungen wird der Stack-Bereich automatisch nach
     Bedarf erweitert. Diese automatische Erweiterung ist jedoch normaler-
     weise nicht für alternative Stacks verfügbar. Wenn ein Signal-Stack
     überläuft, ist das Verhalten des Prozesses unbestimmt.

     Die Richtung des Stack-Wachstums ist in der bisherigen Definition von
     struct sigstack nicht angegeben. Nur indem eine Anwendung die Stack-
     Wachstumsrichtung feststellt oder einen Speicherblock zuordnet und den
     Stack-Zeiger anschließend auf dessen Mitte setzt, kann ein Stack-Zei-
     ger portierbar eingerichtet werden. Die Implementierung geht mögli-
     cherweise davon aus, daß die Größe des Signal-Stacks dem Wert SIGSTKSZ
     entspricht, wie in <signal.h> angegeben. Soll eine Implementierung
     eine andere Signal-Stack-Größe als SIGSTKSZ angeben, sollte
     sigaltstack() verwendet werden.

     Programme sollten longjmp() nicht zum Verlassen einer Signalbehand-
     lungsroutine verwenden, die in einem mit sigstack() erstellten
     Signal-Stack ausgeführt wird. Hierdurch kann der Signal-Stack später
     möglicherweise nicht mehr verwendet werden. Für eine nicht normale
     Beendigung einer Signalbehandlungsroutine kann siglongjmp(),
     setcontext() oder swapcontext() verwendet werden. Diese Funktionen
     unterstützen den Wechsel von einem Stack in einen anderen.

     Zur Verwendung der Funktion sigstack() sind Kenntnisse über die
     zugrundeliegende Stack-Architektur des Systems erforderlich. Aus die-
     sem Grunde ist sigaltstack() der hier beschriebenen Funktion vorzuzie-
     hen.

SIEHE AUCH
     exec(2), fork(2), sigaltstack(2), signal(2), sigvec(3), signal(3-ucb),
     setjmp(3C), sigsetjmp(3C), signal(5).





Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

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