Signal 2 C Fonction

Signal 2 C Fonction
Les signaux sont un type contraint de communication interprète (IPC) qui sont fréquemment utilisés dans les systèmes d'exploitation conformes à POSIX comme Unix, Unix-like et autres. Un événement asynchrone ou synchrone peut être annoncé à un processus en utilisant un signal. L'exécution régulière du processus cible est interrompue par le système d'exploitation lorsqu'un signal est fourni pour le livrer. Si le processus a déjà identifié un gestionnaire de signaux, il exécute ce programme. En l'absence de cela, le gestionnaire de signal standard est utilisé. Il y a une valeur entière pour chaque signal. Les constantes nommées spécifiées dans «Signals.h ”doit être utilisé à la place des valeurs numériques elles-mêmes.

Le système d'exploitation enverra un signal, qui est une interruption générée par un logiciel, à un processus chaque fois que l'utilisateur appuie sur la touche «CTRL-C» ou lorsqu'un autre processus doit communiquer avec le processus. Un processus ne peut recevoir qu'un certain ensemble de signaux. Les entiers servent d'identifiants pour les signaux. Les noms symboliques sont affectés aux numéros de signal. Un signal émis au processus parent lorsque le processus d'un enfant se termine est sigchld, par exemple.

Un signal est transmis à un processus, ce qui définit le bit pertinent dans l'entier des signaux en attente du processus. Le système d'exploitation examine les entiers en attente et bloqués chaque fois qu'un processus est choisi pour s'exécuter sur un processeur particulier. Le processus reprend correctement et reprend l'exécution à l'instruction suivante s'il n'y a pas de signaux en attente. Lorsqu'un ou plusieurs signaux sont arrêtés mais qu'un ou plusieurs sont toujours en attente, la procédure se poursuit également normalement, les signaux sont toujours notés comme en attente. Si un ou plusieurs signaux ne sont pas bloqués mais sont en attente, le système d'exploitation appelle les fonctions de manipulation du signal dans le processus du processus.

Syntaxe de la fonction de signal dans le langage C

La fonction de signal de la bibliothèque C crée un gestionnaire de signaux ou une fonction avec le numéro de signal SIG. La déclaration de la fonction Signal () est fournie dans ce qui suit:

void (* signal (int sig, void (* func) (int))) (int)


Discutons en détail de chacun des paramètres de la fonction du signal. Le «sig» est le numéro de signal qui a une fonction de manutention qui lui est associée. Voici quelques numéros de signal standard cruciaux:

Le sidabrt est appelé terminaison anormale du signal comme celle qui est lancée par la fonction. Le SIGFPE est appelé exception de point flottante de signal qui est une opération mathématique inappropriée telle qu'une division par zéro ou une opération de débordement (pas toujours en utilisant une opération à virgule flottante.)

Le Sigill est le signal illégal et est une instruction non valide ou une image de fonction non valide. Habituellement, un effort pour exécuter une corruption de données ou de code est à blâmer pour cela. Le Sigint est appelé une interruption de signal qui est un repère d'attention interactionnel. L'utilisateur de l'application est généralement celui qui le génère. Le SIGSEVG est l'abréviation de la violation de la segmentation du signal et son accès non autorisé aux données qui se produisent lorsque le logiciel tente de lire ou d'écrire les données qui ne sont pas dans la mémoire qui lui a été attribuée.

Le SIGTERM est l'acronyme de la terminaison du signal où le programme a reçu une demande de résiliation.

Un pointeur de fonction est représenté par le paramètre «func». L'une des fonctions prédéfinies suivantes peut être utilisée ici ou une fonction créée par le programmeur. Le SIG_DFL est la gestion du signal par défaut. Le signal est traité par la réponse par défaut pour ce signal spécifique. Le SIG_IGN est le signal ignoré. Le signal est ignoré.
Exemple 1:

Il existe différentes routines standard de gestionnaire de signaux disponibles. Chaque signal a une routine de gestionnaire par défaut correspondante. Les actions courantes effectuées par les différentes procédures de gestionnaire par défaut incluent l'ignorance du signal qui signifie ne rien faire et simplement revenir en arrière. Le processus doit être terminé. Continuez en libérant un processus bloqué. Arrêtez la procédure en la bloquant. Cette instance illustre le gestionnaire de signal par défaut dans la langue C:

#inclure
#inclure
#inclure
#inclure
#inclure
#inclure
vide handle_sigint (int sig)

printf ("Signal Handler");

int main()

Signal (Sigint, Handle_Sigint);
tandis que (1)

printf ("Hello to C Language \ n");
sommeil (1);

retour 0;

Avec les autres fichiers d'en-tête requis, nous avons importé le «signal.Fichier d'en-tête h ”. Le signal.Le fichier d'en-tête h ”contient une définition de macro constante pour les signaux. La fonction Handle_Sigint est construite qui prend l'objet entier «sig». Nous avons appelé cette fonction à l'intérieur de notre fonction principale. La fonction principale a utilisé l'appel de la fonction de signal et prend les deux arguments: le premier argument est le sigint pour l'interruption du signal et le deuxième argument est le handle_signint à des fins de maintien du signal. La boucle while est définie qui itère sur l'instruction printf qui affiche la chaîne «Hello to C» des temps infinis jusqu'à ce que l'utilisateur appuie sur la commande Ctrl C.

La chaîne est imprimée des temps infinis dans la sortie. En recevant le signal SIGINT et en utilisant son gestionnaire par défaut pour mettre fin au processus, l'utilisateur peut appuyer sur Ctrl + C pour mettre fin au processus.


Exemple 2:

À l'exception de Sigkill, un processus peut utiliser son code de gestionnaire pour remplacer le gestionnaire de signaux par défaut pour pratiquement tous les signaux. Tout nom est acceptable pour une fonction de gestionnaire de signaux, mais il doit avoir un paramètre int et un type de retour de vide. L'exemple de code suivant est l'illustration d'un gestionnaire de signal défini par l'utilisateur:

#inclure
#inclure
vide handle_sigint (int sig)

printf ("signaux attrapé% d \ n", sig);

int main()

Signal (Sigint, Handle_Sigint);
tandis que (1);
retour 0;

Après avoir inclus le fichier d'en-tête, commencez avec le code. Nous avons défini la fonction d'un gestionnaire de signaux. Le paramètre int sig est transmis à la fonction de gestionnaire de signaux. Cette fonction est le gestionnaire du Sigint et imprime l'instruction du signal capturé lorsque l'utilisateur saisit la commande «Ctrl + C». À l'intérieur de la fonction principale, nous avons un appel de système de signal qui prend l'argument Sigint et l'argument Handle_Sigint.

Le programme se déroulera dans la boucle while et imprime la sortie suivante sur chaque commande «Ctrl + C»:


Conclusion

Tout ce guide vous éduque sur la fonction de signal en C. Nous avons passé en revue une introduction aux signaux en C, ainsi qu'une structure de signaux et leurs exemples correspondants. Lorsqu'il s'agit de traiter les perturbations imprévues qui se produisent tout au long de l'exécution d'un programme pendant le temps d'exécution, la commande de signal du langage C est cruciale. Comme il sert de signal pour l'utilisateur et peut détecter les erreurs pendant l'exécution du programme, la fonction de signal peut les gérer facilement.