Funzione libreria C - signal ()

Descrizione

La funzione di libreria C. void (*signal(int sig, void (*func)(int)))(int) imposta una funzione per gestire il segnale, ad esempio un gestore di segnale con numero di segnale sig.

Dichiarazione

Di seguito è riportata la dichiarazione per la funzione signal ().

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

Parametri

  • sig- Questo è il numero di segnale su cui è impostata una funzione di gestione. Di seguito sono riportati alcuni importanti numeri di segnale standard:

Sr.No. Macro e segnale
1

SIGABRT

(Signal Abort) Terminazione anomala, come quella avviata dalla funzione.

2

SIGFPE

(Eccezione in virgola mobile del segnale) Operazione aritmetica errata, come divisione per zero o un'operazione che determina un overflow (non necessariamente con un'operazione in virgola mobile).

3

SIGILL

(Signal Illegal Instruction) Immagine della funzione non valida, come un'istruzione illegale. Ciò è generalmente dovuto a un danneggiamento del codice oa un tentativo di eseguire dati.

4

SIGINT

(Interruzione del segnale) Segnale di attenzione interattivo. Generalmente generato dall'utente dell'applicazione.

5

SIGSEGV

(Violazione della segmentazione del segnale) Accesso non valido alla memoria: quando un programma tenta di leggere o scrivere al di fuori della memoria, gli viene allocato.

6

SIGTERM

(Signal Terminate) Richiesta di terminazione inviata al programma.

  • func- Questo è un puntatore a una funzione. Può essere una funzione definita dal programmatore o una delle seguenti funzioni predefinite:

Sr.No. Descrizione della funzione
1

SIG_DFL

Gestione predefinita: il segnale viene gestito dall'azione predefinita per quel particolare segnale.

2

SIG_IGN

Ignora segnale: il segnale viene ignorato.

Valore di ritorno

Questa funzione restituisce il valore precedente del gestore del segnale o SIG_ERR in caso di errore.

Esempio

L'esempio seguente mostra l'utilizzo della funzione 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);
}

Compiliamo ed eseguiamo il programma sopra che produrrà il seguente risultato e il programma andrà in ciclo infinito. Per uscire dal programma abbiamo usato i tasti 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...