384 定时器

#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);
}