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...