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...