8.11 Signalmaske erfragen oder ändern – sigprocmask()
Die Menge der Signale eines Prozesses, die im Augenblick blockieren, wird als Signalmaske bezeichnet. Jeder neue Prozess, der erzeugt wird, erbt die Signalmaske von seinem Elternprozess. Mit der Funktion sigprocmask() können Sie diese Signalmaske erfragen oder verändern. Die Syntax zu sigprocmask() lautet:
#include <signal.h>
int sigprocmask (int how,
const sigset_t *sig_mask,
sigset_t *sig_mask_old);
Mit how geben Sie an, wie Sie die Signalmaske ändern wollen. Dazu können Sie folgende Angabe machen:
Tabelle 8.9
Parameter, die angeben, wie die Signalmaske geändert werden soll
Konstante
|
Bedeutung
|
SIG_BLOCK
|
Zur Signalmaske des Prozesses werden die Signale aus sig_mask hinzugefügt.
|
SIG_UNBLOCK
|
Von der Signalmaske des Prozesses werden die Signale aus sig_mask entfernt.
|
SIG_SETMASK
|
Eine NEUE Signalmaske wird mit den Signalen belegt, die in sig_mask angegeben sind.
|
Bei den beiden Argumenten sig_mask und sig_mask_old gilt es, drei Fälle zu unterscheiden:
Tabelle 8.10
Signalmaske erfragen, setzen oder beides auf einmal
Angabe
|
Bedeutung
|
sig_mask != NULL
sig_mask_old !=NULL
|
Damit wird die aktuelle Signalmaske in die Adresse von sig_mask_old geschrieben. Anschließend wird die Signalmaske sig_mask entsprechend dem Argument how geändert. Somit kann der Zustand sig_mask_old jederzeit wieder hergestellt werden.
|
sig_mask != NULL
sig_mask_old = NULL
|
Damit wird die Signalmaske sig_mask entsprechend how geschrieben.
|
sig_mask == NULL
sig_mask_old != NULL
|
Damit kann die aktuelle Signalmaske erfragt werden. Die aktuelle Signalmaske befindet sich dann in der Adresse von sig_mask_old. Das Argument how hat dabei keinerlei Bedeutung.
|
Ein Beispiel zu sigprocmask() finden Sie am Ende des Kapitels unter Prozesse synchronisieren.
|