12.2.05

Mensaje repetitivo

El siguiente código muestra un mensaje por pantalla drante 2 segundos, pasado estetiempo recibe una señal SIGALRM y el mensaje cambia. Este proceso se repite infinitas veces, o hasta que alguna variable se desborde.

Hay que cambiar las " de los includes por los signos de mayor y menor.


#include "unistd.h"
#include "signal.h"
#include "string.h"
#include "sys/types.h"

void sig_alarm(int);

char men[50];
int num_alarm = 0;


int main()
{
if ( signal(SIGALRM, sig_alarm) == SIG_ERR) {
perror("Error instalando manejador - ");
return -1;
}

sprintf(men, "Alarma %i", num_alarm);
alarm(2);

while(1) {
printf("%s\n", men);
pause();
}

// Se ejcutará alguna vez esta línea ??
printf("Se acabó.\n");

return 0;
}

//---------------------------

void sig_alarm(int sig) {

if ( signal(SIGALRM, sig_alarm) == SIG_ERR) {
perror("Error instalando manejador - ");
}

alarm(2);
num_alarm++;
sprintf(men, "Alarma %i", num_alarm);
}

2 comments:

Anonymous said...

No. Hay un pause dentro de un while que se ejecuta siempre. Y aunque si salimos del pause gracias a alarm(2), no salimos del while.
Ni siquiera termina el programa por que la señal activa al manejador, y el manejador activa al manejador y realiza de nuevo un alarm(2).

Javier J. said...

Saludos Antonio y gracias por tu comentario.

Tienes toda la razón del mundo. Ten en cuenta que muchos de estos ejercicios se escribieron para complementar unas explicaciones, por lo algunos de los programas pueden no tener sentido por si mismos.