#define _POSIX_SOURCE
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
static int nap = 0;
void tip(int unused) {
nap = 1;
alarm(3);
}
#if 0
unsigned int alarm(unsigned int seconds)
{
struct itimerval old, new;
new.it_interval.tv_usec = 0;
new.it_interval.tv_sec = 0;
new.it_value.tv_usec = 0;
new.it_value.tv_sec = (long int)seconds;
if (setitimer(ITIMER_REAL, &new, &old) < 0) return 0;
else return old.it_value.tv_sec;
}
#endif
int main(int argc, char *argv[])
{
struct sigaction sa;
sa.sa_handler = tip;
sigemptyset(&sa.sa_mask);
sigaction(SIGALRM, &sa, NULL);
alarm(3);
char buf[32];
do {
if (nap) {
static int i = 1;
nap = 0;
fprintf(stderr, "#%02d have a rest.\n", i++);
}
read(0, buf, sizeof(buf));
} while (1);
}