/* restartable syscall test */ #include #include #include void *thr_routine(void *arg) { char c; int err; printf("press a key:\n"); err = read(0, &c, 1); if (err == -1) printf("errno = %d \n", errno); } void handler(int sig, siginfo_t *si, void *ucp) { printf("received signal: %d\n", sig); } int main() { struct sigaction sa; pthread_t td; sa.sa_flags = SA_RESTART; sigemptyset(&sa.sa_mask); sa.sa_sigaction = handler; sigaction(SIGUSR1, &sa, NULL); pthread_create(&td, NULL, thr_routine, NULL); sleep(2); pthread_kill(td, SIGUSR1); pthread_join(td, NULL); return 0; }