#define _POSIX_SOURCE #include #include #include #include #include #include int count; void sig_alrm(int signo) { printf("caught SIGALRM, count = %d\n", count); count++; if (count >= 5) exit(0); alarm(1); } int main() { int i; struct sigaction act; char ch[100]; ssize_t tt; ch[0] = 0; act.sa_handler = sig_alrm; sigemptyset(&act.sa_mask); act.sa_flags = 0; sigaction(SIGALRM, &act, 0); count = 0; alarm(1); for(i=0;;) { memset(ch, 0, sizeof(ch)); tt=read(STDIN_FILENO, ch, 5); printf("i=%d, ch = %s, tt= %d\n", i++, ch, (int)tt); if (tt < 0 && errno == EINTR) { perror("read"); } } }