Fonction de bibliothèque C - signal ()

La description

La fonction de bibliothèque C void (*signal(int sig, void (*func)(int)))(int) définit une fonction pour gérer le signal, c'est-à-dire un gestionnaire de signal avec un numéro de signal sig.

Déclaration

Voici la déclaration de la fonction signal ().

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

Paramètres

  • sig- Il s'agit du numéro de signal auquel une fonction de gestion est définie. Voici quelques numéros de signaux standard importants -

N ° Sr. Macro et signal
1

SIGABRT

(Signal Abort) Arrêt anormal, tel que déclenché par la fonction.

2

SIGFPE

(Exception à virgule flottante du signal) Opération arithmétique erronée, telle qu'une division par zéro ou une opération entraînant un débordement (pas nécessairement avec une opération à virgule flottante).

3

SIGILL

(Signal Instruction illégale) Image de fonction non valide, telle qu'une instruction illégale. Cela est généralement dû à une corruption du code ou à une tentative d'exécution de données.

4

SIGINT

(Signal Interruption) Signal d'attention interactif. Généralement généré par l'utilisateur de l'application.

5

SIGSEGV

(Violation de segmentation du signal) Accès non valide au stockage - Lorsqu'un programme tente de lire ou d'écrire en dehors de la mémoire, il lui est alloué.

6

SIGTERM

(Signal Terminate) Demande de terminaison envoyée au programme.

  • func- Ceci est un pointeur vers une fonction. Cela peut être une fonction définie par le programmeur ou l'une des fonctions prédéfinies suivantes -

N ° Sr. Description de la fonction
1

SIG_DFL

Traitement par défaut - Le signal est géré par l'action par défaut pour ce signal particulier.

2

SIG_IGN

Ignorer le signal - Le signal est ignoré.

Valeur de retour

Cette fonction renvoie la valeur précédente du gestionnaire de signaux, ou SIG_ERR en cas d'erreur.

Exemple

L'exemple suivant montre l'utilisation de la fonction signal ().

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

void sighandler(int);

int main () {
   signal(SIGINT, sighandler);

   while(1) {
      printf("Going to sleep for a second...\n");
      sleep(1); 
   }
   return(0);
}

void sighandler(int signum) {
   printf("Caught signal %d, coming out...\n", signum);
   exit(1);
}

Compilons et exécutons le programme ci-dessus qui produira le résultat suivant et le programme ira en boucle infinie. Pour sortir du programme, nous avons utilisé les touches CTRL + C.

Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Caught signal 2, coming out...