哪个内核函数调用了timer_settime()并在用户空间中实现了定时器处理程序?

时间:2018-12-25 08:03:49

标签: c linux timer linux-kernel posix

我有一个多线程程序,其中使用timer_create()函数在主线程中创建了一个计时器。然后,我使用timer_settime()函数设置计时器。当计时器在计时器持续时间后过期时,它将调用已注册的计时器处理函数。

这是我的代码段:

#define CLOCKID CLOCK_REALTIME
#define SIG SIGRTMIN
int ret;
timer_t timerid;
struct sigevent sev;
struct itimerspec its;

sigset_t mask;
struct sigaction sa;


static void handler(int sig, siginfo_t *si, void *uc)
{

}

void *threadA(void *data_)
{

      while(1)
      {

        its.it_value.tv_sec = 0;
        its.it_value.tv_nsec = DELAY1;
        its.it_interval.tv_sec = 0;
        its.it_interval.tv_nsec = 0;

        ret = timer_settime(timerid, 0, &its, NULL);
        if ( ret < 0 )
            perror("timer_settime");
     }
}

int main(int argc, char *argv[])
{
      sa.sa_flags = SA_RESTART;
      sa.sa_sigaction = handler;
      sigemptyset(&sa.sa_mask);
      err = sigaction(SIG, &sa, NULL);
      if (0 != err) {
           printf("sigaction failed\n"); }

      sev.sigev_notify = SIGEV_SIGNAL;
      sev.sigev_signo = SIG;
      sev.sigev_value.sival_ptr = &timerid;
      ret = timer_create(CLOCKID, &sev, &timerid);
      if ( ret < 0 )
           perror("timer_create");

}

当我在C程序中调用timer_create()timer_settime()函数时,我想知道在内核空间中调用了哪些函数。

此外,当计时器到期时,哪个内核函数负责调用计时器处理程序?

include/linux/posix-clock.h 文件中,我找到了以下定义,但未定义这些功能。

/**
 * struct posix_clock_operations - functional interface to the clock
 * @timer_create:   Create a new timer

 * @timer_settime: Set a timer's initial expiration and interval
 */     

struct posix_clock_operations {
    struct module *owner;

    int  (*timer_create) (struct posix_clock *pc, struct k_itimer *kit);



    int  (*timer_settime)(struct posix_clock *pc,
                          struct k_itimer *kit, int flags,
                          struct itimerspec *tsp, struct
                          timerspec *old);

1 个答案:

答案 0 :(得分:0)

strace您的程序,您将看到使用了哪些系统调用。

在某些情况下,这可能取决于您的libc,因为内核通常提供多种实现目标的方法。