Función de biblioteca C - señal ()
Descripción
La función de la biblioteca C void (*signal(int sig, void (*func)(int)))(int) establece una función para manejar la señal, es decir, un controlador de señal con número de señal sig.
Declaración
A continuación se muestra la declaración de la función signal ().
void (*signal(int sig, void (*func)(int)))(int)
Parámetros
sig- Este es el número de señal al que se establece una función de manipulación. Los siguientes son algunos números de señal estándar importantes:
No Señor. | Macro y señal |
---|---|
1 | SIGABRT (Anulación de señal) Terminación anormal, como la iniciada por la función. |
2 | SIGFPE (Excepción de señal de coma flotante) Operación aritmética errónea, como división por cero o una operación que da como resultado un desbordamiento (no necesariamente con una operación de coma flotante). |
3 | SIGILL (Señal de instrucción ilegal) Imagen de función no válida, como una instrucción ilegal. Esto generalmente se debe a una corrupción en el código o un intento de ejecutar datos. |
4 | SIGINT (Interrupción de señal) Señal de atención interactiva. Generalmente generado por el usuario de la aplicación. |
5 | SIGSEGV (Violación de la segmentación de la señal) Acceso no válido al almacenamiento: cuando un programa intenta leer o escribir fuera de la memoria, se le asignó. |
6 | SIGTERM (Señal de terminación) Solicitud de terminación enviada al programa. |
func- Este es un puntero a una función. Esta puede ser una función definida por el programador o una de las siguientes funciones predefinidas:
No Señor. | Función descriptiva |
---|---|
1 | SIG_DFL Manejo predeterminado: la señal se maneja mediante la acción predeterminada para esa señal en particular. |
2 | SIG_IGN Ignorar señal: la señal se ignora. |
Valor devuelto
Esta función devuelve el valor anterior del manejador de señales, o SIG_ERR en caso de error.
Ejemplo
El siguiente ejemplo muestra el uso de la función 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);
}
Compilemos y ejecutemos el programa anterior que producirá el siguiente resultado y el programa irá en bucle infinito. Para salir del programa usamos las teclas 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...