Función de la biblioteca C -signal()
Biblioteca estándar de C - <signal.h>
Descripción
Función de la biblioteca Cvoid (*signal(int sig, void (*func)(int)))(int)Establece una función para manejar señales, es decir, unsigmanejador de señales con parámetro.
signalLa función es una función de la biblioteca estándar de C, utilizada para configurar manejadores de señales. Esta función está definida en<signal.h>el archivo de cabecera.signalLa función permite al programa definir el manejador a ejecutar cuando ciertas señales (por ejemploSIGINT, generadas al presionar Ctrl+C) lleguen.
Declaración
La siguiente es la declaración de la función signal().
void (*signal(int sig, void (*func)(int)))(int);
Parámetros
- sig-- El código de señal que se usa como variable en el manejador de señales. A continuación se muestran algunas constantes de señal estándar importantes:
| macro | Señal |
|---|---|
| SIGABRT | (Signal Abort) El programa termina de manera anormal. |
| SIGFPE | (Signal Floating-Point Exception) Error en operación aritmética, como división por 0 o desbordamiento (no necesariamente operaciones de punto flotante). |
| SIGILL | (Signal Illegal Instruction) Imagen de función ilegal, como una instrucción ilegal, generalmente causada por alguna variante en el código o al intentar ejecutar datos. |
| SIGINT | (Signal Interrupt) Señal de interrupción, como ctrl-C, generalmente generada por el usuario. |
| SIGSEGV | (Signal Segmentation Violation) Acceso ilegal a la memoria, como acceder a una unidad de memoria inexistente. |
| SIGTERM | (Signal Terminate) Señal de solicitud de terminación enviada a este programa. |
- func-- Un puntero a una función. Puede ser una función definida por el programa, o una de las siguientes funciones predefinidas:
| SIG_DFL | El manejador de señales predeterminado. |
| SIG_IGN | Ignorar la señal. |
Valor de retorno
Esta función devuelve el valor anterior del manejador de señales; cuando ocurre un error, devuelve SIG_ERR.
Ejemplo
El siguiente ejemplo demuestra el uso de la función signal().
Ejemplo
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void sighandler(int);
int main()
{
signal(SIGINT, sighandler);
while(1)
{
printf("Comenzando a dormir un segundo...\n"\n");
sleep(1);
}
return(0);
}
void sighandler(int signum)
{
printf("Señal capturada %d, saliendo...\n"\n", signum);
exit(1);
}
Compilemos y ejecutemos el programa anterior. Esto producirá el siguiente resultado, y el programa entrará en un bucle infinito; se debe usar la tecla CTRL + C para salir del programa.
开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 捕获信号 2,跳出...Otras extensiones