/* alarm.c

   Din 5 in 5 secunde scrie un numar generat aleatoriu
   
   Autor: Sabin-Corneliu Buraga <busaco@infoiasi.ro> (c)1998-2002
   Ultima actualizare: 20 martie 2002
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>

#define TIMER 5			/* temporizare la 5 sec. */

static void
scrie ()			/* scrie numarul la iesirea standard */
{
  printf ("%d\n", rand () % 1000);
  fflush (stdout);
}

void
alarma ()			/* trateaza SIGALRM */
{
  /* la aparitia lui SIGALRM va fi apelata scrie() */
  if (signal (SIGALRM, scrie) == SIG_ERR)
    {
      perror ("signal()");
      exit (1);
    }
  /* initializam generatorul de numere aleatoare */
  srand (getpid ());

  while (1)			/* rulam la infinit... */
    {
      alarm (TIMER);		/* setam o alta alarma */
      pause ();			/* asteptam aparitia unui semnal */
    }
}

int
main (void)			/* programul principal */
{
  switch (fork ())		/* lansam procesul in fundal */
    {
    case -1:
      perror ("fork()");
      return -1;
    case 0:			/* copilul preia executia */
      alarma ();
    default:			/* parintele se termina */
      sleep (1);
      return 0;
    }
}

