Mit sigaltstack()
wird ein alternativer Stack definiert, in dem Signale bearbeitet werden können. Wenn ss ungleich null ist, wird ein Zeiger auf eine stack_t
Struktur erwartet, die einen Stack beschreibt, auf dem die Signale bearbeitet werden können. Mit sigaction
kann man festlegen, welche Signale auf dem alternativen Signalstack behandelt werden sollen. Für die Dauer der Ausführung der Signalbehandlungsroutine schaltet das System dann auf den Signalstack um.
Die Struktur stack_t
enthält die folgenden Komponenten:
int *ss_sp
long ss_size
int ss_flags
Ist ss nicht NULL
, beschreibt die Struktur stack_t
einen alternativen Signalstack, welcher nach Rückkehr von sigaltstack()
wirksam wird. Die Komponenten ss_sp
und ss_size
bestimmen die Basis und die Größe des Stacks. Die Komponente ss_flags
gibt den Zustand des neuen Stacks an und kann die folgenden Werte aufweisen:
SS_DISABLE
| Der Stack wird deaktiviert und ss_sp und ss_size werden ignoriert. Wenn SS_DISABLE nicht gesetzt ist, wird der Stack aktiviert. |
Ist oss nicht NULL
, so enthält die Struktur nach erfolgreicher Rückkehr aus sigaltstack
die Beschreibung des alternativen Signalstacks, der vor dem Aufruf von sigaltstack()
aktiv war. ss_sp
und ss_size
geben die Basis und die Größe des Stacks an.
Die ss_flags
-Komponente gibt den Zustand des Stacks an. Dieser Zustand kann die folgenden Werte annehmen:
SS_ONSTACK
| Der Prozess wird momentan mit dem alternativen Signalstack ausgeführt. Versuche, den alternativen Signalstack während der Ausführung des Prozesses zu ändern, schlagen fehl. |
SS_DISABLE
| Der alternative Signalstack ist momentan deaktiviert. |
Der Wert SIGSTKSZ
stellt die Anzahl der Bytes dar, welche im Allgemeinen für einen alternativen Stack notwendig sind. Der Wert MINSIGSTKSZ
definiert dabei die minimale Stackgröße für eine Signalbehandlungsroutine. Bei der Berechnung der Stackgröße sollte das Programm noch diesen Minimalwert zusätzlich anlegen, um den Eigenbedarf des Betriebssystems zu berücksichtigen. Die Konstanten SS_ONSTACK
, SS_DISABLE
, SIGSTKSZ
und MINSIGSTKSZ
sind in <signal.h>
definiert.