Saltar al contenido

Señales simples – Programación en C y función de alarma

Este dilema se puede solucionar de diversas maneras, pero te compartimos la resolución más completa en nuestra opinión.

Solución:

Se está olvidando de configurar el controlador de alarma inicialmente. Cambiar el inicio de main() me gusta:

int main(int argc, char *argv[])
{
   signal(SIGALRM, ALARMhandler);
   ...

Además, el controlador de señales probablemente no imprimirá nada. Esto se debe a que la biblioteca C almacena en caché la salida hasta que ve el final de la línea. Entonces:

void  ALARMhandler(int sig)

  signal(SIGALRM, SIG_IGN);          /* ignore this signal       */
  printf("Hellon");
  signal(SIGALRM, ALARMhandler);     /* reinstall the handler    */

Para un programa del mundo real, la impresión desde un controlador de señales no es muy segura. Un manejador de señales debe hacer lo menos posible, preferiblemente solo colocar una bandera aquí o allá. Y la bandera debe ser declarada volatile.

No está configurando el controlador en su main función.

antes de hacerlo alarm(2)Pon el signal(SIGALRM, ALARMhandler); en tus main.

Debería funcionar entonces.

Tenga en cuenta que su “Todo listo” nunca se imprimirá, porque permanecerá en el bucle while (1) después de que se haya ejecutado el procesador de señal. Si desea que el ciclo se rompa, deberá tener una bandera que cambie el controlador de señal.

#include 
#include 
#include 

/* number of times the handle will run: */
volatile int breakflag = 3;

void handle(int sig) 
    printf("Hellon");
    --breakflag;
    alarm(1);


int main() 
    signal(SIGALRM, handle);
    alarm(1);
    while(breakflag)  sleep(1); 
    printf("donen");
    return 0;

No está instalando el controlador de señal primero.
Debe decirle al sistema que desea manejar la señal antes de recibirla, por lo que debe llamar signal() de la red principal antes de que llegue la señal.

int main(int argc, char *argv[])

  signal(SIGALRM, ALARMhandler);     /* install the handler    */
  alarm(2);                     /* set alarm clock          */
  while (1);

Comentarios y calificaciones

Si te ha sido de utilidad este post, sería de mucha ayuda si lo compartieras con otros programadores de esta manera nos ayudas a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *