我有一个多线程程序,其中使用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);
答案 0 :(得分:0)
strace
您的程序,您将看到使用了哪些系统调用。
在某些情况下,这可能取决于您的libc,因为内核通常提供多种实现目标的方法。