|
void
(*signal(int sig, void (*func)(int)))(int);
Escoge a de las tres formas en la
cual será subsecuentemente manejado el número de señal
sig. Si el valor de func es SIG_DEF, ocurrirá el manejo por
omisión de la señal. Si el valor de func es SIG_IGN,
la señal será ignorada. De lo contrario cuando dicha
señal ocurra func apuntará a la función a llamarse.
Dicha función es el manejador de señal.
Cuando ocurre una señal, si func apunta a una función,
primero se ejecutará el equivalente de signal (sig, SIG_DFL)
o se ejecuta un bloqueo de la señal, definido por la puesta
en práctica.(si el valor de sig es SIGILL, la restauración
de SIG_DFL dependerá de la puesta en práctica). A
continuación se ejecuta el equivalente de (*func) (sig) .La
función func puede terminar ejecutando un enunciado return
o llamando a la función abort, exit o longjmp. Si func ejecuta
un enunciado return y el valor de sig es SIGFPE o cualquier otro
valor definido por la puesta en práctica correspondiente
a una excepción de cómputo, el comportamiento queda
indefinido.De lo contrario, el program continuará en ejecución
desde el punto en que fué interrumpido.
Si la señal ocurre de forma distinta que como resultado a
la llamada de la función abort o raise, el comportamiento
queda indefinido si el manejador de señal llama a cualqyier
función de biblioteca estándar distinta de la función
signal misma (con un primer argumento del número de señalcorrespondiente
a la señal que causó la invocación del manejador)
o se refiere a cualquier otro objeto con persistencia estática,
distinto que mediante la asignación de un valor a una variable
de persistencia estática del tipo volatile sig_atomic_t.
Además , si dicha llamada a una función signalresulta
en un regreso SIG_ERR, el valor errno queda indeterminado.
Al arranque del programa, el equivalente de signal(sig, SIG_IGN);
puede ser ejecutado para algunas señales seleccionadas de
una forma definida por la puesta en práctica; el equivalente
de signal(sig, SIG_DFL); es ejecutado para todas las otras señales
definidas por la puesta en práctica.
Si la solicitud puede ser aceptada, la función signal devuelve
el valor de func para la llamada más reciente a signal para
la señal especificada sig. De lo contrario, se devuelve un
valor de SIG_ERR y en errno queda un valor positivo.
int raise(int sig);
la función raise envia la señal sig al programa
en ejecución.Si tiene exito, la función raise devuelve
cero, y no cero si no lo tiene.
|
|