1 static jmp_buff alarm_return;
2 unsigned int sleep(unsigned int seconds)
4 signandler_t prev_handler;
5 if ((prev_handler = signal(SIGALRM, alarm_hand)) == SIG_ERR) {
6 printf("Cannot set handler for alarm\n");
9 if (setjmp(alarm_return) == 0) { /* if not returning from handler */
10 alarm(second); /* call alarm */
11 pause(); /* then wait */
13 /* restore previous signal handler */
14 signal(SIGALRM, prev_handler);
15 /* remove alarm, return remaining time */
18 void alarm_hand(int sig)
20 /* check if the signal is the right one */
21 if (sig != SIGALRM) { /* if not exit with error */
22 printf("Something wrong, handler for SIGALRM\n");
24 } else { /* return in main after the call to pause */
25 longjump(alarm_return, 1);