diff options
Diffstat (limited to 'man2/timer_create.2')
-rw-r--r-- | man2/timer_create.2 | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/man2/timer_create.2 b/man2/timer_create.2 index ba5ad78fb..a3987bb1e 100644 --- a/man2/timer_create.2 +++ b/man2/timer_create.2 @@ -360,31 +360,31 @@ Caught signal 34 #include <stdlib.h> #include <time.h> #include <unistd.h> - +\& #define CLOCKID CLOCK_REALTIME #define SIG SIGRTMIN - +\& #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e } while (0) - +\& static void print_siginfo(siginfo_t *si) { int or; timer_t *tidp; - +\& tidp = si\->si_value.sival_ptr; - +\& printf(" sival_ptr = %p; ", si\->si_value.sival_ptr); printf(" *sival_ptr = %#jx\en", (uintmax_t) *tidp); - +\& or = timer_getoverrun(*tidp); if (or == \-1) errExit("timer_getoverrun"); else printf(" overrun count = %d\en", or); } - +\& static void handler(int sig, siginfo_t *si, void *uc) { @@ -393,12 +393,12 @@ handler(int sig, siginfo_t *si, void *uc) printf() is not async\-signal\-safe; see signal\-safety(7). Nevertheless, we use printf() here as a simple way of showing that the handler was called. */ - +\& printf("Caught signal %d\en", sig); print_siginfo(si); signal(sig, SIG_IGN); } - +\& int main(int argc, char *argv[]) { @@ -408,64 +408,64 @@ main(int argc, char *argv[]) struct sigevent sev; struct sigaction sa; struct itimerspec its; - +\& if (argc != 3) { fprintf(stderr, "Usage: %s <sleep\-secs> <freq\-nanosecs>\en", argv[0]); exit(EXIT_FAILURE); } - +\& /* Establish handler for timer signal. */ - +\& printf("Establishing handler for signal %d\en", SIG); sa.sa_flags = SA_SIGINFO; sa.sa_sigaction = handler; sigemptyset(&sa.sa_mask); if (sigaction(SIG, &sa, NULL) == \-1) errExit("sigaction"); - +\& /* Block timer signal temporarily. */ - +\& printf("Blocking signal %d\en", SIG); sigemptyset(&mask); sigaddset(&mask, SIG); if (sigprocmask(SIG_SETMASK, &mask, NULL) == \-1) errExit("sigprocmask"); - +\& /* Create the timer. */ - +\& sev.sigev_notify = SIGEV_SIGNAL; sev.sigev_signo = SIG; sev.sigev_value.sival_ptr = &timerid; if (timer_create(CLOCKID, &sev, &timerid) == \-1) errExit("timer_create"); - +\& printf("timer ID is %#jx\en", (uintmax_t) timerid); - +\& /* Start the timer. */ - +\& freq_nanosecs = atoll(argv[2]); its.it_value.tv_sec = freq_nanosecs / 1000000000; its.it_value.tv_nsec = freq_nanosecs % 1000000000; its.it_interval.tv_sec = its.it_value.tv_sec; its.it_interval.tv_nsec = its.it_value.tv_nsec; - +\& if (timer_settime(timerid, 0, &its, NULL) == \-1) errExit("timer_settime"); - +\& /* Sleep for a while; meanwhile, the timer may expire multiple times. */ - +\& printf("Sleeping for %d seconds\en", atoi(argv[1])); sleep(atoi(argv[1])); - +\& /* Unlock the timer signal, so that timer notification can be delivered. */ - +\& printf("Unblocking signal %d\en", SIG); if (sigprocmask(SIG_UNBLOCK, &mask, NULL) == \-1) errExit("sigprocmask"); - +\& exit(EXIT_SUCCESS); } .EE |