Función de señal 2 C

Función de señal 2 C
Las señales son un tipo restringido de comunicación entre procesos (IPC) que se usan con frecuencia en los sistemas operativos que cumplen con POSIX como UNIX, UNIX y otros. Se puede anunciar un evento asincrónico o sincrónico a un proceso utilizando una señal. La ejecución regular del proceso de destino es interrumpida por el sistema operativo cuando se proporciona una señal para entregarla. Si el proceso ya ha identificado un controlador de señal, ejecuta ese programa. En ausencia de eso, se utiliza el controlador de señal estándar. Hay un valor entero para cada señal. Las constantes con nombre especificadas en "Señales.h "debe usarse en lugar de los valores numéricos en sí.

El sistema operativo enviará una señal, que es una interrupción generada por software, a un proceso cada vez que el usuario presione la tecla "CTRL-C" o cuando otro proceso necesita comunicarse con el proceso. Un proceso solo puede recibir un cierto conjunto de señales. Los enteros sirven como identificadores para señales. Los nombres simbólicos se asignan a los números de señal. Una señal emitida al proceso principal cuando el proceso de un niño termina es Sigchld, por ejemplo.

Una señal se transmite a un proceso, que establece el bit relevante en el entero de señales pendientes del proceso. El sistema operativo examina los enteros pendientes y bloqueados cada vez que se elige un proceso para ejecutarse en un procesador en particular. El proceso se reanuda correctamente y reanuda la ejecución en la siguiente instrucción si no hay señales pendientes. Cuando se detienen una o más señales, pero aún una o más están pendientes, el procedimiento también continúa normalmente con las señales que aún se observan como pendientes. Si una o más señales no están bloqueadas pero están pendientes, el sistema operativo llama las funciones de manejo de señal en el código del proceso '.

Sintaxis de la función de señal en el lenguaje C

La función de señal de la biblioteca C crea un manejador o función de señal con el número de señal SIG. La declaración de la función de señal () se proporciona a continuación:

void (*señal (int sig, void (*func) (int))) (int)


Discutamos cada uno de los parámetros de la función de señal en detalle. El "Sig" es el número de señal que tiene una función de manejo asociada con él. Aquí hay algunos números de señal estándar cruciales:

El sidabrt se denomina terminación anormal de señal como la que inicia la función. El SIGFPE se conoce como una excepción de punto flotante de señal que es una operación matemática inadecuada, como una división por cero o una operación desbordante (no siempre utilizando una operación de punto flotante.)

El Sigill es la señal ilegal y es una instrucción inválida o una imagen de función no válida. Por lo general, un esfuerzo por ejecutar una corrupción de datos o código es culpable de esto. El Sigint se denomina una interrupción de señal que es una señal de atención interaccional. El usuario de la aplicación suele ser el que la genera. El Sigsevg es la abreviatura de la violación de la segmentación de la señal y su acceso no autorizado a los datos que ocurren cuando el software intenta leer o escribir los datos que no están en la memoria que se le ha asignado.

El Sigterter es el acrónimo de la terminación de la señal donde el programa recibió una solicitud de terminación.

Un puntero de función está representado por el parámetro "func". Una de las siguientes funciones preestablecidas se puede usar aquí o una función creada por el programador. El SIG_DFL es el manejo de la señal de forma predeterminada. La señal se trata por la respuesta predeterminada para esa señal específica. El sig_ign es la señal ignorada. La señal no se tiene en cuenta.
Ejemplo 1:

Hay varias rutinas de controlador de señales estándar disponibles. Cada señal tiene una rutina de controlador predeterminada correspondiente. Las acciones comunes realizadas por los diversos procedimientos de controlador predeterminado incluyen ignorar la señal que significa no hacer nada y simplemente volver. El proceso debe terminar. Continuar lanzando un proceso bloqueado. Detener el procedimiento bloqueándolo. Esta instancia ilustra el controlador de señal predeterminado en el idioma C:

#incluir
#incluir
#incluir
#incluir
#incluir
#incluir
Void Handle_Sigint (int Sig)

printf ("Handler de señal");

int main ()

señal (Sigint, Handle_Sigint);
mientras (1)

printf ("Hello to C Language \ n");
dormir (1);

regresar 0;

Junto con los otros archivos de encabezado requeridos, importamos la "señal.H ”Archivo de encabezado. La señal.El archivo de encabezado H ”contiene una definición macro constante para las señales. Se construye la función Handle_Sigint que toma el objeto entero "Sig". Llamamos a esta función dentro de nuestra función principal. La función principal utilizó la llamada de la función de señal y toma los dos argumentos: el primer argumento es el sigint para la interrupción de la señal y el segundo argumento es el Handle_SignInt para el propósito del controlador de señales. El bucle While se define qué itera sobre la instrucción PRINTF que muestra los tiempos infinitos de la cadena "Hello to C Language" hasta que el usuario presione el comando Ctrl C.

La cadena se imprime tiempos infinitos en la salida. Al recibir la señal Sigint y usar su controlador predeterminado para finalizar el proceso, el usuario puede presionar CTRL+C para finalizar el proceso.


Ejemplo 2:

A excepción de Sigkill, un proceso puede usar su código de controlador para sustituir el controlador de señal predeterminado por prácticamente todas las señales. Cualquier nombre es aceptable para una función de controlador de señal, pero debe tener un parámetro int y un tipo de retorno de vacío. El siguiente código de ejemplo es la ilustración de un controlador de señal definido por el usuario:

#incluir
#incluir
Void Handle_Sigint (int Sig)

printf ("Señales capturadas %d \ n", sig);

int main ()

señal (Sigint, Handle_Sigint);
mientras (1);
regresar 0;

Después de incluir el archivo de encabezado, simplemente comience con el código. Definimos la función de un manejador de señal. El parámetro int SIG se pasa a la función del controlador de señal. Esta función es el controlador para el sigint e imprime la declaración de la señal captura cuando el usuario ingresa el comando "Ctrl+C". Dentro de la función principal, tenemos una llamada del sistema de señal que toma el argumento de Sigint y el argumento HANGE_SIGINT.

El programa irá en el bucle While e imprime la siguiente salida en cada comando "Ctrl+C":


Conclusión

Esta guía completa le educa sobre la función de señal en c. Hemos superado una introducción a las señales en C, junto con una estructura de señales y sus ejemplos correspondientes. Cuando se trata de abordar las interrupciones no planificadas que ocurren a lo largo de la ejecución de un programa durante el tiempo de ejecución, el comando de señal del lenguaje C es crucial. Como sirve como señal para el usuario y puede detectar errores durante la ejecución del programa, la función de señal puede manejarlos con facilidad.