У меня есть многопоточная программа, в которой я создал таймер в главном потоке, используя функцию 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");
}
Я хочу знать, какие функции вызываются в пространстве ядра,когда я вызываю timer_create()
, timer_settime()
внутри моей программы на языке C.
Кроме того, какая функция ядра отвечает за вызов обработчика таймера по истечении таймера?
Внутри 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);