C usage de la fonction de sigaction

C usage de la fonction de sigaction
Une sigaction () est une fonction qui permet d'appeler / d'observer ou d'examiner une action spécifique associée à un signal particulier. On pense que l'on considère une fonction de signal et de sigaction sur la même page. Mais en réalité, cela ne s'est pas produit. La fonction Signal () ne bloque pas d'autres signaux lorsque l'exécution du gestionnaire actuel est en cours. Dans le même temps, la fonction Sigaction peut bloquer d'autres signaux jusqu'à ce que le gestionnaire actuel soit retourné.

Syntaxe

#inclure
# int sigaction (int sig, const struct sigaction * __ restrict__ new, struct sigaction * __ restrict__ old);

La fonction Sigaction examine l'action associée à un signal particulier. Nous parlons maintenant des arguments dans le paramètre de la fonction Sigaction. Le premier est Int 'Sig' 'car le type de données révèle qu'il s'agit d'un nombre qui fait référence au signal qui est déjà reconnu. La fonction Sigaction définit l'action et l'associe au signal. L'argument SIG qui est utilisé doit être dans la bibliothèque.

La sigaction structurelle constante est un pointeur qui est d'abord appelé null principalement. Si c'est le cas, alors la fonction de sigaction examine l'action qui est définie actuellement pour gérer SIG. Cela ne modifiera ni ne annulera cette action. Et si le nouveau pointeur n'est pas appelé valeur nul, il indiquera une structure de sigaction. L'action identifiée spécifiquement dans la structure de sigaction devient alors la nouvelle action associée au SIG.

Le troisième argument est struct sigaction * old il souligne l'adresse mémoire à laquelle la fonction de sigaction stocke la structure de sigaction. La fonction Sigaction utilise cette adresse mémoire pour stocker la structure qui décrit l'activité actuellement associée à SIG. L'ancienne valeur peut être une valeur nulle; Dans ce cas, la structure de sigaction n'est pas stockée comme des informations.

Structure de sigaction

Maintenant, nous allons parler de la structure de sigaction.

Les membres présents dans la structure sont mentionnés ici.

Void (*) (int) sa_handler

C'est un pointeur de la fonction et gère le signal qui lui arrive. La valeur de cette fonction peut afficher l'action par défaut ou indiquer le signal à ignorer.

Masque sigset_t

Nous ne pouvons pas utiliser le mécanisme de blocage de tout signal; Si SA_MASK a utilisé les signaux de blocage, ces signaux seront ignorés. La fonction sigaction () ne renvoie aucune erreur.

Int sa_flags

Il y a beaucoup de drapeaux qui affectent le comportement du signal. Certains d'entre eux sont expliqués ici.

_Sa_ignore

C'est la seule sortie, et aucune application ne peut le spécifier.

SA-Restart

Il dit au système d'obtenir les fonctions de redémarrage de la bibliothèque si elles sont interrompues par un signal. Les fonctions sur lesquelles cette fonction de redémarrage est appliquée sont celles qui sont définies comme pour être interrompues par le signal, puis définis Errno sur eintr qui acceptent (), Pause (), Close () et Big Pause () sont les fonctions qui sont redémarrable si un signal les interrompt.

SA_SIGINFO

Cette fonction indique au système d'utiliser l'action du signal spécifié par SA_SIGACTION au lieu de SA_HANDLER. Lorsque l'indicateur est désactivé et que l'action est affectée par le signal, la fonction de gestionnaire de signal spécifié par SA_HANDLER est invoquée en tant que fonction vide (INT Signo); Ici, Signo contient le numéro de signal généré le système.

SA_SIGACTION

C'est un pointeur qui pointe vers la fonction attribuée pour gérer le signal. Cette fonction contient trois paramètres. Le premier comprend un entier de type contenant le signal de la fonction pour être invoqué. Le deuxième argument est un type de pointeur siginfo_t; il contient des informations supplémentaires sur la source de signal. Le troisième est le «pointeur vers le vide.'

Mise en œuvre de la fonction de sigaction

Nous avons implémenté les codes de sigaction dans le système d'exploitation Linux. Utilisez un éditeur de texte pour écrire le code source dans le langage de programmation C; Pour la sortie de la valeur résultante, utilisez le terminal Ubuntu en compilant via un compilateur GCC. Cette compilation puis exécutez le code.

Exemple 1

Cet exemple contient une liste de bibliothèques et . Dans cet exemple, un masque de signal est utilisé et défini avec SigAction () pour aucun appel à l'autre gestionnaire, en particulier lorsqu'un seul gestionnaire est utilisé. La fonction de gestionnaire de signaux contient le Signo comme argument.

L'ID de processus s'affiche dans le programme principal pour assurer le travail. La sigaction est une structure qui décrit un gestionnaire de signaux. C'est la raison pour laquelle un gestionnaire de signaux est contenu par lui. Un masque de signal est utilisé qui montre qu'il devrait y avoir un blocage d'un signal tandis que la fonction de la manipulation du signal est en exécution. Spécifiez maintenant la fonction de gestionnaire de signal lorsqu'un signal spécifié s'est produit.

# struct sigaction Act;
# loi.SA.Handler = $ Sighandler;

Après cela, tous les signaux sont ajoutés à l'ensemble de masque de signal. Tous les signaux seront bloqués lorsque les fonctions du gestionnaire de signaux s'exécutent. Lorsque notre gestionnaire de signaux existe généralement, il restaure le masque de signal d'origine. SA_RESTART reprendra la fonction. Un gestionnaire de signaux est ajouté à Sigint.

Après avoir écrit le code, compilez-le à l'aide du compilateur dans le terminal Ubuntu. «Sig.C ”est le nom d'un fichier.

$ gcc -o sig. c
$./ sig

Lors de l'exécution, vous pouvez voir que l'ID de processus s'affiche d'abord dont les signaux doivent être bloqués. Le message affiché signifie que la fonction renvoie une valeur positive.

Exemple 2

Considérons maintenant un autre exemple, dans lequel la première partie de l'exemple détermine si le signal Sigchld est actuellement ignoré. En utilisant un pointeur nul pour un nouvel argument, le gestionnaire de signal actuel n'est pas modifié. Le programme principal contient l'instruction IF pour utiliser la fonction SigAction; Si la valeur retournée est -1, cela signifie que l'enfant est ignoré. Et dans l'autre partie, si la valeur retournée est le signal lui-même. Cela signifie que l'enfant est par défaut.

En exécution, vous verrez que l'enfant par défaut.

Exemple 3

Cet exemple contient la même fonctionnalité que le deuxième exemple, mais certaines fonctionnalités supplémentaires sont également ajoutées. Comme un nouveau gestionnaire est ajouté dans cette fonction via Sigaction.

Conclusion

L'article «Utilisation de la fonction de sigaction» contient la fonction de fonctionnement et une description détaillée de ses paramètres dans les arguments. Sigaction joue un rôle vital dans le blocage des signaux qui ne sont pas reconnus ou provenant de pirates. C'est pourquoi la plupart des programmeurs préfèrent que les fonctions de sigaction soient utilisées dans les programmes. SA_FLAG est un argument essentiel de la fonction Sigaction, nous avons donc expliqué quelques drapeaux importants avec des fonctionnalités de base. Le système d'exploitation Linux demande un rôle important dans la mise en œuvre de la fonction Sigaction dans le langage de programmation C. Ce guide vise à expliquer les caractéristiques de sigaction et la structure conçue pour cibler les signaux qui s'approchent.