这对您有用吗?(修改了
timer_create手册页中示例中的代码。)
#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <signal.h>#include <time.h>#define CLOCKID CLOCK_REALTIME#define SIG SIGUSR1timer_t timerid;static void handler(int sig, siginfo_t *si, void *uc){ if(si->si_value.sival_ptr != &timerid){ printf("Stray signaln"); } else { printf("Caught signal %d from timern", sig); }}int main(int argc, char *argv[]){ struct sigevent sev; struct itimerspec its; long long freq_nanosecs; sigset_t mask; struct sigaction sa; printf("Establishing handler for signal %dn", SIG); sa.sa_flags = SA_SIGINFO; sa.sa_sigaction = handler; sigemptyset(&sa.sa_mask); sigaction(SIG, &sa, NULL); sev.sigev_notify = SIGEV_SIGNAL; sev.sigev_signo = SIG; sev.sigev_value.sival_ptr = &timerid; timer_create(CLOCKID, &sev, &timerid); its.it_value.tv_sec = 10; its.it_value.tv_nsec = 0; its.it_interval.tv_sec = its.it_value.tv_sec; its.it_interval.tv_nsec = its.it_value.tv_nsec; timer_settime(timerid, 0, &its, NULL); sleep(100); exit(EXIT_SUCCESS);}当捕捉到来自定时器的信号时,
Caught signal 10 from timer将显示。否则
Stray signal将显示。



