Función signal ANSI C

void (*signal(int señal, void (*func)(int))(int);

Elige una de las tres formas se ha de manejar el número de señal señal. Si el valor de func es SIG_DFL, la señal se controlará por defecto. Si el valor de func es SIG_IGN, la señal será ignorada. Si no, func apuntará a una función a ser llamada cuando una señal se produce. Dicha función se llama un controlador de señales.

Cuando se produce una señal, si func apunta a una función, primeramente la equivalente a signal( señal, SIG_DFL ); es ejecutada o un bloqueo de señal, definido según la implementación, es realizado. (Si el valor de señal es SIGILL, el caso de que se reinicie SIG_DFL está definido según la implementación). A continuación la equivalente a (*func)( señal ); es ejecutada. La función func puede terminar mediante ejecutando la sentencia return o mediante llamando las funciones abort, exit, o longjmp. Si func ejecuta una sentencia de retorno y el valor de señal era SIGFPE o cualquier otro valor definido según la implementación correspondiendo a una excepción computada, el comportamiento no está definido. De lo contrario, el programa continúa la ejecución desde el momento de interrupción.

Si la señal se produce de otra forma que el resultado de llamar las funciones abort o raise, el comportamiento no está definido si el controlador de señales llama a cualquier función de la biblioteca estándar distinta a sí misma, la función signal (con el primer argumento de la señal numérica correspondiendo a la señal que causó la invocación al controlador), o hace referencia a cualquier objeto con una duración de almacenamiento estático distinto a asignando un valor a una variable de duración estática de tipo volatile sig_atomic_t. Además, si tal llamada a la función signal resulta en un retorno de SIG_ERR, el valor de errno es indeterminado.

Al comienzo del programa, la equivalente a signal( señal, SIG_IGN ); puede ser ejecutada para algunas señales seleccionadas de una manera definida según la implementación; la equivalentea signal( señal, SIG_DFL ); es ejecutada para todas las demás señales definidas por la implementación.

Valor de retorno:

La función signal retorna el valor de func para la llamada más reciente a signal para la señal especificada, señal, si la operación fue realizada con éxito. Si falla, entonces retorna SIG_ERR y un valor positivo es guardado en errno.

Ejemplo:

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

typedef void (*funcPtr)();

int salir=0;    /* Falso */

void controlador( int *lista_Registros )
{
   int i;

   signal( SIGINT, (funcPtr)controlador );

   printf( "Error capturado\n\n" );
   for( i=0; i<11; i++ )
      printf( "\n[%d] = %d\t", i, lista_Registros[i] );
   salir=1;     /* Verdadero */
}

int main()
{
   float x, y=2.5, h=0.01;

   signal( SIGINT, (funcPtr)controlador );

   for( x=1.0; x<=100.0 && !salir; x+=h )
      printf( "%f / %f = %f\n", y, x, y/x );    /* Lista demasiada Larga */

   return 0;
}