Linux内核API timer_pending

函数timer_pending( )用于测试动态定时器的状态是处于活动状态还是处于非活动状态。

timer_pending文件包含

#include<linux/timer.h>

timer_pending函数定义

在内核源码中的位置:linux-3.19.3/include/linux/timer.h

函数定义格式:

static inline int timer_pending(const struct timer_list * timer)
{
    return timer->entry.next ! = NULL;
}

timer_pending输入参数说明

  • 此函数的输入参数是struct timer_list类型的变量,此变量用于存放动态定时器,其定义及详细说明参考add_timer( )分析文档的输入参数说明部分。

timer_pending返回参数说明

  • 此函数的返回值是整型,可能的取值是0、1,返回0说明此定时器处于活动状态,返回1说明此定时器处于非活动状态。

timer_pending实例解析

编写测试文件:timer_pending.c

头文件及全局变量声明:

#include <linux/module.h>
#include<linux/timer.h>
MODULE_LICENSE("GPL");
struct timer_list my_timer1; //声明动态定时器

自定义定时器函数:

// 定义动态定时器到期处理函数,在此只有显示功能,不做任何处理
void my_timer1_function(unsigned long data)
{
    printk("In the my_timer1_function\n");
    struct timer_list *mytimer = (struct timer_list *)data;
    printk("the current jiffies is:%ld\n", jiffies);    //显示当前节拍数
    printk("the expires of my_timer1 is:%ld\n", mytimer->expires); //显示字段expires
    int result=timer_pending(mytimer);                  //测试定时器状态
    printk("the timer_pending result of my_timer1 is: %d\n", result); //显示测试结果
}

定时器模块初始化函数:

int __init timer_pending_init(void)
{
    printk("my_timer1 will be created.\n");
    printk("the current jiffies is :%ld\n", jiffies); //显示当前节拍数
    init_timer(&my_timer1);                              //初始化动态定时器
    my_timer1.expires = jiffies + 1*HZ;
    my_timer1.data = &my_timer1;
    my_timer1.function = my_timer1_function;
    add_timer(&my_timer1);                               //激活定时器
    int result=timer_pending(&my_timer1);             //测试定时器状态
    printk("the timer_pendng result of my_timer1 is: %d\n", result); //显示测试结果
    printk("my_timer1 init.\n");
    return 0;
}

定时器模块退出函数:

void __exit timer_pending_exit(void)
{
    printk("Goodbye timer_pending\n");
    del_timer(&my_timer1); //删除定时器变量
}

定时器模块初始化及退出函数调用:

module_init(timer_pending_init);
module_exit(timer_pending_exit);

实例运行结果及分析:

执行命令insmod timer_pending.ko插入模块,然后输入命令dmesg -c,出现如图所示结果。

Linux内核API timer_pending

结果分析:

由图可以看出第一次调用函数时返回结果是1,说明函数调用时动态定时器处于非活动状态,而第二次调用此函数时返回值是0,说明函数调用时动态定时器处于活动状态。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程