sigaction(3-thr) sigaction(3-thr)
NAME
sigaction - Synchrone Signalaktionen (Signalfunktionen der POSIX-
Software) prüfen und ändern
SYNTAX
#include <signal.h>
struct sigaction {
void (*sahandler)();
sigsett samask;
int saflags;
};
int sigaction(sig, act, oact) int sig; const
struct sigaction *act; struct sigaction *oact;
PARAMETER
sig Synchrones Signal, das geprüft oder geändert werden soll.
act Zeigt auf eine Struktur sigaction, die die Aktion
beschreibt, die beim Empfang des durch den Wert des Parame-
ters act angegebenen Signals auszuführen ist.
oact Zeigt auf eine Struktur sigaction, in der die Signalaktions-
daten zurückgegeben werden, die zur Zeit des Funktionsauf-
rufs von sigaction() galten.
BESCHREIBUNG
Mit dem POSIX-Service sigaction können Signalbehandlungsroutinen
(Handler) für jeden Thread zum Abfangen von synchronen Signalen
installiert werden. Der Service wird in einem Multithread-Prozeß auf-
gerufen, um thread-spezifische Aktionen für diese Signale einzurich-
ten. Dieser Aufruf entspricht dem POSIX-Äquivalent des Systemaufrufs
sigaction() mit folgenden Ausnahmen bzw. Abweichungen:
- Die Routine sigaction() ändert nur das Verhalten für einzelne Thre-
ads.
- Die Routine sigaction() gilt nur für synchrone Signale. Der Ver-
such, eine Signalaktion für ein asynchrones Signal festzulegen,
führt zu einem Fehler. Dies gilt auch in einem Einzel-Thread-Pro-
zeß.
Jede Multithread-Anwendung, die DCE Threads verwendet, muß die
Funktion sigwait() für die Behandlung asynchroner Signale verwen-
den. Die Funktion sigwait() kann verwendet werden, um synchron auf
die Auslieferung asynchron generierter Signale zu warten.
- Das Flag SARESTART wird immer vom zugrundeliegenden System im
POSIX-Modus gesetzt, so daß unterbrochene Systemaufrufe nicht neu
gestartet werden, sondern mit dem Rückgabewert -1 und dem Fehler
EINTR in errno fehlschlagen.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
sigaction(3-thr) sigaction(3-thr)
Das Flag SARESTART des Systems hat genau die gegenteilige Bedeu-
tung wie das Flag SARESTART im Feld saflags und wird immer im
zugrundeliegenden, aufgrund von sigaction() erfolgten Systemaufruf
gesetzt, unabhängig davon, ob SARESTART im Feld saflags angegeben
worden ist.
- Die Signalmaske wird über die POSIX-Funktionen sigsetops(3C) bear-
beitet. Dies sind die Funktionen sigemptyset(3C), sigfillset(3C),
sigaddset(3C), sigdelset(3C) und sigismember(3C).
Über die Funktion sigaction() kann durch Angabe eines Nullzeigers für
act in Erfahrung gebracht werden, wie ein bestimmtes Signal momentan
behandelt wird, da die Aktion unverändert bleibt, es sei denn, dieser
Parameter ist kein Nullzeiger. Der Parameter oact darf kein Nullzeiger
sein, wenn die zur Zeit des Aufrufs von sigaction() gültige Signalak-
tion zurückgegeben werden soll.
RÜCKGABEWERTE
Mögliche Rückgabewerte sind:
EFAULT Entweder act oder oact zeigt auf Speicher, der für den
Adreßraum des Prozesses nicht gültig ist. Eine neue Signal-
behandlungsroutine wird nicht installiert.
EINVAL Der durch sig angegebene Wert ist ungültig. Eine neue Sig-
nalbehandlungsroutine wird nicht installiert.
EINVAL Es wurde versucht, eine Signalbehandlungsroutine für SIGKILL
oder SIGSTOP zu ignorieren oder anzugeben. Eine neue Signal-
behandlungsroutine wird nicht installiert.
SIEHE AUCH
sigsuspend(2), sigvec(2), siginterrupt(3), sigpending(3-thr),
sigprocmask(3-thr), setjmp(3C), sigsetops(3C), signal(5), tty(7).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98