Fonctions de bibliothèque C -signal()

Bibliothèque standard C - <signal.h>

Description

Fonctions de la bibliothèque Cvoid (*signal(int sig, void (*func)(int)))(int)Configurer une fonction pour gérer le signal, c'est-à-dire avecsigLe gestionnaire de signal pour le paramètre.

signalLa fonction est une fonction de la bibliothèque standard C, utilisée pour configurer des gestionnaires de signaux. Elle est définie dans<signal.h>Dans le fichier d'en-tête.signalLa fonction permet à un programme de définir, lorsque certains signaux (tels queSIGINT, générés en appuyant sur Ctrl+C) arrivent, le gestionnaire à exécuter.

Déclaration

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

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

Paramètre

  • sig-- Le code de signal utilisé comme variable dans le gestionnaire de signal. Voici quelques constantes de signal standard importantes :
Macrosignal
SIGABRT(Signal Abort) Programme terminé anormalement.
SIGFPE(Signal Floating-Point Exception) Erreur d'opération arithmétique, comme un diviseur égal à 0 ou un dépassement de capacité (pas nécessairement une opération en virgule flottante).
SIGILL(Signal d'instruction illégale) Image de fonction illégale, telle qu'une instruction illégale, généralement causée par une variante dans le code ou une tentative d'exécuter des données.
SIGINT(Signal Interrupt) Signal d'interruption, tel que Ctrl-C, généralement généré par l'utilisateur.
SIGSEGV(Signal de violation de segmentation) Un accès mémoire illégal, tel que l'accès à une unité de mémoire inexistante.
SIGTERM(Signal de terminaison) Le signal de demande de terminaison envoyé à ce programme.
  • func-- Un pointeur vers une fonction. Il peut s'agir d'une fonction définie par le programme, ou de l'une des fonctions prédéfinies suivantes :
SIG_DFLLe gestionnaire de signal par défaut.
SIG_IGNIgnorer le signal.

Valeur de retour

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

Exemple

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

Exemple

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

void sighandler(int);

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

   while(1)
   {
      printf(Début du sommeil pendant une seconde...\n");
      sleep(1);
   }

   return(0);
}

void sighandler(int signum)
{
   printf(Signal %d capturé, sortie...\n", signum);
   exit(1);
}

Compilons et exécutons le programme ci-dessus, ce qui produira les résultats suivants, et le programme entrera dans une boucle infinie, nécessitant l'utilisation de CTRL + C pour sortir du programme.

开始休眠一秒钟...
开始休眠一秒钟...
开始休眠一秒钟...
开始休眠一秒钟...
开始休眠一秒钟...
捕获信号 2,跳出...

Bibliothèque standard C - <signal.h>

autres extensions