Fonctions de bibliothèque C -sigpending()
sigpendingUne fonction de la bibliothèque standard C utilisée pour obtenir l'ensemble des signaux en attente pour le processus courant. Les signaux en attente sont des signaux qui ont été bloqués mais pas encore traités. Cette fonction est définie dans<signal.h>Dans le fichier d'en-tête.
Syntaxe
int sigpending(sigset_t *set);
Paramètre
sigset_t *set: pointe vers unsigset_tUne variable de type, qui sera remplie avec l'ensemble des signaux en attente pour le processus courant.
Valeur de retour
- Renvoie 0 en cas de succès.
- Renvoie -1 en cas d'échec et définit
errnopour indiquer le type d'erreur.
Exemple
Ce qui suit est un exemple utilisantsigpendingUn exemple de programme de la fonction récupérant l'ensemble des signaux en attente du processus courant. Le programme bloqueSIGINTsignal, puis envoie ce signal, et utilisesigpendingVérifie si ce signal se trouve dans l'ensemble des signaux en attente.
Exemple
#include <signal.h>
#include <unistd.h>
void handle_sigint(int sig) {
printf("Signal intercepté %d\n", sig);
}
int main() {
sigset_t new_mask, old_mask, pending;
// Définir le gestionnaire pour SIGINT
signal(SIGINT, handle_sigint);
// Initialiser l'ensemble de signaux et bloquer le signal SIGINT
sigemptyset(&new_mask);
sigaddset(&new_mask, SIGINT);
if (sigprocmask(SIG_BLOCK, &new_mask, &old_mask) == -1) {
perror("sigprocmask");
return 1;
}
// Envoyer le signal SIGINT
raise(SIGINT);
// Obtenir l'ensemble des signaux en attente
if (sigpending(&pending) == -1) {
perror("sigpending");
return 1;
}
// Vérifier si SIGINT est dans l'ensemble des signaux en attente
if (sigismember(&pending, SIGINT)) {
printf("SIGINT est en attente\n");
} else {
printf("SIGINT n'est pas en attente\n");
}
// Restaurer le masque de signaux d'origine
if (sigprocmask(SIG_SETMASK, &old_mask, NULL) == -1) {
perror("sigprocmask");
return 1;
}
return 0;
}
Après compilation et exécution du programme, la sortie sera :
SIGINT is pending Caught signal 2
Le programme bloque d'abordSIGINTsignal, puis envoie ce signal, et utilisesigpendingVérifieSIGINTS'il se trouve dans l'ensemble des signaux en attente. Enfin, le programme restaure le masque de signaux d'origine et intercepteSIGINTsignal, exécute le gestionnaire de signal.
Analyse syntaxique
sigset_t new_mask, old_mask, pending;: définit trois ensembles de signaux, utilisés pour contrôler le masquage des signaux et stocker l'ensemble des signaux en attente.- Utilisation
sigprocmaskFonction de blocageSIGINTSignal, et sauvegarde le masque de signaux d'origine. - Utilisation
raiseFonction d'envoiSIGINTsignal. - Utilisation
sigpendingLa fonction récupère l'ensemble des signaux en attente et vérifieSIGINTs'il se trouve dans l'ensemble des signaux en attente. - Utilisation
sigprocmaskLa fonction restaure le masque de signaux d'origine.
Notes
sigpendingLa fonction récupère l'ensemble des signaux en attente du processus courant, y compris tous les signaux qui ont été envoyés mais pas encore traités.- Les fonctions de gestion de signaux doivent être aussi courtes que possible, car les autres signaux sont bloqués pendant le traitement d'un signal. Les fonctions de gestion de signaux longues à exécuter peuvent affecter les performances temps réel du programme.