Tratar alarma mediante señales
El código del primer ejemplo (prog1.c), muestra un ejemplo completo de cómo se arma un manejador de una señal determinada. El programa consiste en ejecutar la rutinatratar_alarma() cada 3 segundos. Para ello, se arma un manejador para la señal SIGALRM donde se ha especificado la función tratar_alarma() como manejador.
El programa principal entra dentro de un bucleinfinito. En primer lugar, se define un temporizador mediante la funciónalarm(3) que dispara la señal SIGALRM a los 3 segundos. Seguidamente, el proceso se auto suspende con la llamadapause(). Elvencimiento del temporizador genera la señal SIGALRM, la cual despierta al proceso, y con ello, se ejecuta la rutina tratar_alarma(). En la siguiente iteración, el proceso vuelve a armar de nuevo eltemporizador. Este proceso se repite dentro del bucle hasta la llegada de la señal SIGINT (o Ctrl-C) generada desde el teclado, y cuya acción es finalizar el proceso.
Armado de dos manejadores
El códigodel segundo ejemplo (prog2.c), muestra un ejemplo de cómo se arman dos manejadores. El ejemplo consiste en contar el número de veces que se ha pulsado Ctrl-C (SIGINT) durante 5 segundos. Cada vez quese pulsa Ctrl-C, se incrementa una variable global num_cortes. El programa termina cuando salta la señal SIGALRM, mostrando el valor de la variable num_cortes terminando con ello el programa.#include <stdio.h>
#include <signal.h>
void tratar_alarma (); // Prototipo del manejador
int main (){
struct sigaction act;
/* Armar el manejador */
act.sa_handler = tratar_alarma;sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGALRM, &act, NULL);
printf("Disparo de la alarma cada 3 segundos.\n");
printf("Teclee Ctrl-C para terminar elproceso.\n");
for(;;) {
alarm (3);
pause();
}
return 0;
}
void tratar_alarma( int a ) {
printf ("Alarma activada %d. \n", a);
#include <stdio.h>
#include <stdlib.h>...
Regístrate para leer el documento completo.