Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigaltstack(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getcontext(2)

sigaction(2)

sigsetjmp(3C)

signal(5)

ucontext(5)

sigaltstack(2)                                               sigaltstack(2)

NAME
     sigaltstack - Alternativen Stack-Kontext eines Signals setzen/lesen

SYNTAX
     #include <signal.h>

     int sigaltstack(const stackt *ss, stackt *oss);

BESCHREIBUNG
     Mit sigaltstack() wird ein alternativer Stack-Bereich definiert, in
     dem Signale bearbeitet werden können. Wenn ss ungleich Null ist, wird
     ein Zeiger auf einen Stack-Bereich erwartet, auf dem die Signale bear-
     beitet werden können; dem System wird mitgeteilt, ob der Prozeß gerade
     mit dem Stack arbeitet. Wenn die Aktion des Signals anzeigt, daß mit
     dem alternativen Stack gearbeitet werden soll [angegeben durch
     sigaction(2)], prüft das System, ob der Prozeß momentan auf dem alter-
     nativen Stack abläuft. Operiert der Prozeß nicht auf dem Signal-Stack,
     schaltet das System für die Dauer der Ausführung der Signalbehand-
     lungsroutine auf den alternativen Signal-Stack um.

     Die Struktur sigaltstack enthält die folgenden Komponenten:

          char    *sssp
          int     sssize
          int     ssflags

     Ist ss nicht NULL, wird ein Zeiger auf den alternativen Signal-Stack
     erwartet, welcher nach Rückkehr von sigaltstack() wirksam wird. Die
     Komponenten sssp und sssize bestimmen die Basis und die Größe des
     Stacks, welche automatisch an die Wachstumsrichtung und Wertigkeit
     angepaßt wird. Die Komponente ssflags gibt den Zustand des neuen
     Stacks an und kann die folgenden Optionen aufweisen:

     SSDISABLE  Der Stack wird deaktiviert und sssp und sssize werden
                 ignoriert. Wenn SSDISABLE nicht gesetzt ist, wird der
                 Stack aktiviert.

     Ist oss nicht NULL, wird ein Zeiger auf eine Struktur erwartet, welche
     den alternativen Signal-Stack bezeichnet, der vor dem Aufruf von
     sigaltstack() aktiv war. sssp und sssize geben die Basis und die
     Größe des Stacks an. Die Komponente ssflags gibt den Zustand des
     Stacks an. Dieser Zustand kann die folgenden Werte annehmen:

     SSONSTACK  Der Prozeß wird momentan mit dem alternativen Signal-Stack
                 ausgeführt. Versuche, den alternativen Signal-Stack wäh-
                 rend der Ausführung des Prozesses zu ändern, schlagen
                 fehl.

     SSDISABLE  Der alternative Signal-Stack ist momentan deaktiviert.






Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

sigaltstack(2)                                               sigaltstack(2)

     Der Wert SIGSTKSZ ist ein Systemstandardwert, der die Anzahl der Bytes
     angibt, die im Normalfall bei der manuellen Zuordnung eines alternati-
     ven Stack-Bereichs belegt werden. Der Wert MINSIGSTKSZ definiert dabei
     die minimale Stack-Größe für eine Signalbehandlungsroutine. Bei der
     Berechnung einer alternativen Stack-Größe sollte ein Programm diesen
     Minimalwert noch zum erforderlichen Stack-Bedarf addieren, um den
     Eigenbedarf des Betriebssystems zu berücksichtigen. Die Konstanten
     SSONSTACK, SSDISABLE, SIGSTKSZ und MINSIGSTKSZ sind in signal(5)
     definiert.

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

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     sigaltstack() schlägt fehl, wenn eine der folgenden Bedingungen gege-
     ben ist:

     EFAULT    ss oder oss weisen über den zugewiesenen Adreßraum des Pro-
               zesses hinaus.

     EINVAL    Das Argument ss ist kein Nullzeiger und die Komponente
               ssflags, auf die ss zeigt, enthält andere Flags als
               SSDISABLE.

     ENOMEM    Die Größe des alternativen Stack-Bereichs ist kleiner als
               MINSIGSTKSZ.

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

ERGEBNIS
     Bei Erfolg liefert sigaltstack() 0 zurück. Bei Fehler wird -1 zurück-
     gegeben und errno zur Anzeige des Fehlers gesetzt.

HINWEISE
     Der folgende Programmauszug wird dazu verwendet, um einen alternativen
     Stack-Bereich zuzuordnen:

          if ((sigstk.sssp = (char *)malloc(SIGSTKSZ)) == NULL)
               /* Fehlerbehandlung */;

          sigstk.sssize = SIGSTKSZ;
          sigstk.ssflags = 0;
          if (sigaltstack(&sigstk, (stackt *)0) < 0)
               perror("sigaltstack");

SIEHE AUCH
     getcontext(2), sigaction(2), sigsetjmp(3C), signal(5), ucontext(5).



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

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