Problem in Timers and signal

前端 未结 4 1951
别跟我提以往
别跟我提以往 2020-12-06 03:35

I have implemented a POSIX timer using timer_create( ) API, and this will generate SIGUSR1 when the timer expires for which i have put a handler code. Now the problem is, if

4条回答
  •  有刺的猬
    2020-12-06 04:08

    Will this work for you? (Modified the code from example in timer_create man page.)

    #include 
    #include 
    #include 
    #include 
    #include 
    
    #define CLOCKID CLOCK_REALTIME
    #define SIG SIGUSR1
    timer_t timerid;
    
    
    static void handler(int sig, siginfo_t *si, void *uc)
    {
        if(si->si_value.sival_ptr != &timerid){
            printf("Stray signal\n");
        } else {
            printf("Caught signal %d from timer\n", 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 %d\n", 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);
        /* Start the timer */
    
        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);
    }
    

    When signal from timer is caught Caught signal 10 from timer will be displayed. Otherwise Stray signal will be displayed.

提交回复
热议问题