signal() - gestione dei segnali
Quando il processo riceve il segnale signum, il
processo puo' comportarsi in 3 modi differenti a seconda che
sighandler sia stato impostato come:
NOTA
Ora appare piu' leggibile quali siano il tipo degli argomenti passati
alla funzione e quale sia il tipo tornato da signal().
Pertanto perche' un programma che gestisce i segnali sia portabile tra
le diverse versioni di Unix, occorre scrivere la funzione
sighandler affinche':
SINOPSI
DESCRIZIONE
La funzione signal() stabilisce che quando il processo corrente
riceve il segnale signum, il controllo deve passare come e'
specificato dal signal handler sighandler.
Per specificare il segnale signum puo' essere impiegato uno dei
valori costanti definiti nell'header standard (o in un altro header da
questo richiamato) oppure un valore numerico.
sighandler puo' essere o una funzione utente oppure uno dei
valori SIG_IGN o SIG_DFL.
L'uso di una funzione di signal handler per un segnale e' detto
"catching the signal" (cattura del segnale).
N.B. - I segnali SIGKILL e SIGSTOP non possono essere ne' ignorati
e ne' catturati.
VALORE DI RITORNO
In caso di successo la funzione signal() ritorna il precedente
valore della funzione signal handler.
Viene ritornato SIG_ERR in caso di errore.
Il prototype indicato nella sezione SINOPSI puo'
essere semplificato nella seguente forma:
La funzione accetta due argomenti: uno di tipo int mentre l'altro
e' di tipo puntatore a funzione (la quale a sua volta accetta un
argomento intero e torna void).
Il tipo ritornato da signal e' un puntatore a funzione che
che accetta un argomento intero e torna void.
CONFORME A
Ansi C
PORTABILITA'
System V
Alla ricezione del segnale signum la funzione di
signal handler viene ripristinata al valore di default
SIG_DFL prima che venga eseguita la funzione
sighandler associata con signal().
In risposta alle successive ricezioni del segnale signum
viene attuato il comportamento standard previsto per il
segnale.
BSD
Con questa versione di Unix, quando il processo riceve il segnale
signum, prima che venga passato il controllo alla funzione
di signal handler, vengono bloccati ulteriori riconoscimenti del
segnale.
Il blocco ha termine all'uscita della funzione sighandler.
Cosi' facendo i successivi arrivi del segnale signum
vengono ignorati, evitando corse critiche.
A questo punto successivi arrivi del segnale signum vengono
gestiti correttamente dalla funzione sighandler
ESEMPIO
VEDI ANCHE
alarm()
kill()
killpg()
pause()
sleep()
wait()
Indice linguaggio C |
Indice librerie C |
Umberto Zappi Home Page |
Indice funzioni C |