C Utilisation de la fonction SigProcmask

C Utilisation de la fonction SigProcmask
Vous avez peut-être entendu parler de la programmation de socket en C. L'une des fonctions de socket est la fonction «sigprocmask». Cette fonction a généralement été utilisée dans le code pour inspecter ou modifier le masque de signal de la fonction d'appel. Le masque de signal est un terme utilisé pour un groupe de signaux qui sont actuellement bloqués et ne peuvent pas être transmis pour la fonction d'appel. Ce type de signal est connu sous le nom de «signaux bloqués.«Vous pouvez dire qu'un processus peut toujours recevoir les signaux bloqués, mais il ne sera pas utilisé tant qu'ils ne seront pas bloqués et libérés, je.e., soulevé. Jusque-là, il sera en attente. Par conséquent, dans le guide d'aujourd'hui, nous discuterons de l'utilisation de la fonction SigProcmask dans la programmation C. Faisons un départ.

Après l'Ubuntu 20.04 Connexion réussie, vous devez lancer la coquille de l'Ubuntu 20.04 Système d'abord après la connexion. Alors, essayez le raccourci «Ctrl + Alt + T» simplement sur l'écran de bureau. Il lancera le shell terminal pour vous en quelques secondes. Assurez-vous de mettre à jour votre système à l'aide du package APT de votre système. Après cela, vous devez exécuter l'instruction «Touch» avec le nom de fichier que vous souhaitez générer, je.e., Pour créer le fichier C via le shell. Ce fichier nouvellement créé se trouve dans le dossier «Accueil» de l'explorateur de fichiers de votre système. Vous pouvez essayer de l'ouvrir avec l'éditeur «Texte» pour créer du code dedans. Une autre façon de l'ouvrir dans le shell est d'utiliser l'éditeur «GNU Nano» à l'aide du mot-clé «Nano» avec un nom de fichier comme démontré en dessous.

Exemple 01:

Nous avons commencé notre code dans l'éditeur «Nano» en incluant certains en-têtes C nécessaires. Ces en-têtes pourraient être les en-têtes les plus courants comme «STdio.h ”,« unistd.h ”et« stdlib.h ”. En dehors de cela, le fichier d'en-tête le plus important «Signal.h ”a été ajouté pour utiliser les fonctions de traitement du signal dans le code C. Tous les travaux ont été effectués dans la méthode principale de ce programme (). Ainsi, après avoir commencé la méthode, nous avons initialisé certaines variables de construction de signal à l'aide de l'objet «sigset_t», je.e., S, OS et PS. Le «S» signifie Signal, «OS» représente un ensemble de signaux d'origine et le «PS» représente un ensemble de signaux en attente.

Le «sigemptyset» a utilisé la construction «S» pour initialiser ou déclarer un masque de signal et ignorer tous les signaux. Après cela, la fonction «sigaddset» a été utilisée pour ajouter le signal initialisé «S» à l'ensemble de signal SIGINT spécifié. La routine du gestionnaire de signaux Sigint fait référence au «Ctrl + C», i.e., interrompre le caractère. Il arrêtera l'exécution du processus actuel et reviendra à la boucle principale.

Vient maintenant la fonction SigProcmask ici en utilisant trois paramètres. Le paramètre SIG_BLOCK montre que tous les signaux trouvés dans un ensemble de signaux «S» seront ajoutés à l'ensemble de signaux actuel. Le & s indique le pointeur vers un ensemble de signal spécifique qui a été utilisé pour modifier le masque de signal selon la construction «Sigint». Le paramètre «OS» pointe vers l'ensemble de signaux stockant le masque de signal pour une méthode particulière. La déclaration printf est là pour afficher l'ancien masque de signal de l'ensemble de signaux. La fonction «sigping-sigding» est là pour enregistrer des données concernant les signaux dans l'ensemble de signaux qui sont en attente. La déclaration printf est à nouveau là pour afficher le signal en attente définie sur la coque à l'aide de la construction «PS». La méthode «Kill» est venue ici pour tuer le processus actuel en utilisant l'ID de processus via la fonction «getPid ()». La fonction SigPending est à nouveau appelée pour obtenir les signaux en attente de l'ensemble, et l'instruction printf affichera celles. La fonction SigProcmask utilise l'ensemble prédéfini «SIG_UNBLOCK» pour continuer à débloquer et à augmenter la fonction dans la liste en attente. L'ensemble de signaux «S» sera libéré à l'aide de Signal Mask «OS."

Compilez votre fichier de code C à l'aide de l'instruction à faire afficher dans le shell.

Votre fichier a été exécuté. Il vous montrera l'ancien signal défini sur la coque: «OS."Mais, comme les signaux de Set« S »sont désormais bloqués, nous verrons que les signaux reçoivent mais en attente et non. Nous ne pouvons pas tuer le processus car le traitement des signaux est bloqué. Enfin, nous avons publié les signaux.

Exemple 02:

Regardons un autre exemple de la fonction «sigprocmask» est C pour bloquer et débloquer l'ensemble de signal spécifique. Nous avons donc ajouté un nouveau fichier et essayé un nouveau code. Tout d'abord, vous devez ajouter les mêmes fichiers d'en-tête dans le fichier de code, comme indiqué ci-dessous. La fonction «Catcher» définie par l'utilisateur est là pour afficher simplement que nous sommes à l'intérieur de cette fonction en utilisant sa fonction printf.

L'exécution principale commence à partir de la fonction principale () de notre code. Il contient deux arguments. Tout d'abord, nous avons utilisé des constructions de temps «s» pour le début et «f» pour la finition via le mot-clé «Time_t». La structure Sigaction est déclarée «SACT» pour définir la nature pour un signal pour faire quelque chose. La construction «sigset_t» est utilisée pour déclarer deux ensembles de signaux, i.e., «NS» pour un nouvel ensemble et «OS» pour les anciens ensembles. La variable double «dif» est déclarée. Tout d'abord, la fonction SigempTyset est utilisée pour initialiser le masque de signal pour la structure «SACT» et exclure tous les signaux. Le gestionnaire SA_FLAGS a été utilisé pour le massacre de Sigaction et initialisé à zéro. Le «SA_HANDLER» a été utilisé pour déclarer la fonction «Catcher» comme gestionnaire de signaux en utilisant l'objet Sigaction «SACT». La fonction SigAction est appelée ici en utilisant le sigalrm pour définir l'alarme du signal «SACT» ici.

Le «sigemptyset» a été utilisé sur l'ensemble de signal «NS» pour initialiser un masque de signal et exclure tous les signaux. La fonction sigaddset ajoute le sigalrm à l'ensemble de signaux «ns». Le SigProcmask ajoute les signaux «NS» à l'ensemble de signaux actuel. L'ensemble de signaux «OS» représente le masque de signal pour un processus particulier. L'heure de début a été notée et imprimée en utilisant la fonction «ctime ()» dans printf. L'alarme pendant 1 seconde est initialisée et le temps de fin a été noté. La différence entre la finition et les heures de début a été calculée à l'aide de la fonction «difftime». Si la différence est inférieure à 10 secondes, la fonction SigProcmask utilisera l'ensemble de signal «OS» pour remplacer le masque de signal actuel pour un processus particulier à l'aide de Sig_Setmask. La dernière instruction PRINTF est là pour afficher le moment où un jeu de signaux est libéré pour les alarmes.

Après avoir compilé et exécuté le fichier, il nous montre le temps où le jeu de signal d'alarme est bloqué. Après quelques secondes, la fonction de receveur est appelée, et une autre instruction montre le temps de déblocage du signal d'alarme défini pour libérer.

Conclusion:

Cet article montre l'explication concernant l'utilisation de la fonction SigProcmask dans la langue C. Nous avons discuté de 2 brefs et simples exemples pour illustrer le fonctionnement de la fonction SigProcmask ainsi que d'autres fonctions de signal. Nous espérons que cet article serait un bonus pour chaque utilisateur qui est nouveau dans les signaux.