Tout d'abord, vous pouvez utiliser sigprocmask avec un pointeur ensemble vide.
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
a. comment peut être réglé sur: SIG_UNBLOCK
(le signal dans le jeu sont retirés de l'ensemble des signaux bloqués Il est légal de tenter de débloquer le signal qui est pas bloqué.)
b. set
peut être défini sur NULL
(car vous ne souhaitez pas modifier les signaux bloqués)
c. Si oldset
n'est pas NULL
, la valeur précédente du masque de signal est stockée dans oldset. Ergo, vous obtenez les signaux bloqués dans l'emplacement dont l'adresse est stockée dans oldset.
En second lieu, pour savoir si vous êtes dans une routine de traitement du signal, lorsque vous écrivez la définition du gestionnaire de signaux, vous pouvez accepter int Signum comme paramètre, comme dans:
void mySignalHandler(int signum);
Si vous voulez savoir si vous pouvez bloquer d'autres signaux à ce moment-là, vous pouvez simplement avoir une fonction de blocage au début & débloquer la fonction à la fin (en utilisant sigprocmask()
). Vous pouvez même régler ces signaux sur l'état SIG_IGN
pour les ignorer lors de la gestion du signal actuel (en utilisant signal()
).
Enfin, s'il vous plaît lire l'homme pages!
Edit: Puisque l'auteur dit qu'il les a ne lit, je recommande d'utiliser la commande apropos pour trouver ces fonctions difficiles à trouver. Par exemple,
$ apropos "blocked signals"
vous donne environ 5 coups sûrs, dont 1 sigprocmask
Cheers!
aux pages Jetant de l'homme que je commence à me demander si vous n'avez pas besoin de garder vous suivre ... – dmckee