linux新增timerfd接口详解
来源:互联网 发布:淘宝卖家怎么看权重 编辑:程序博客网 时间:2024/06/04 19:41
timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,所以能够被用于select/poll的应用场景。
1. 使用方法
timerfd提供了如下接口供用户使用
timerfd_create
inttimerfd_create(int clockid, int flags);
timerfd_create用于创建一个定时器文件。
参数clockid可以是CLOCK_MONOTONIC或者CLOCK_REALTIME。
参数flags可以是0或者O_CLOEXEC/O_NONBLOCK。
(
O_CLOEXEC : 用于多线程,在创建新线程时,会拷贝原来线程打开的文件描述符,但是对于新线程来说并不需要,加上这个标志位以后,在创建线程时会自动关闭这些描述符。
)
函数返回值是一个文件句柄fd。
timerfd_settime
inttimerfd_settime(int ufd, int flags, const struct itimerspec * utmr, structitimerspec * otmr);
此函数用于设置新的超时时间,并开始计时。
参数ufd是timerfd_create返回的文件句柄。
参数flags为1代表设置的是绝对时间;为0代表相对时间。
参数utmr为需要设置的时间。
参数otmr为定时器这次设置之前的超时时间。
函数返回0代表设置成功。
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */
};
struct itimerspec {
struct timespecit_interval; /* Interval for periodictimer 第一次以后的超时周期*/
struct timespec it_value; /* Initial expiration 初次超时时间*/
};
比如it_value,it_interval分别设置为2,5,那么超时时间分别为2,7,12…
timerfd_gettime
inttimerfd_gettime(int ufd, struct itimerspec * otmr);
此函数用于获得定时器距离下次超时还剩下的时间。如果调用时定时器已经到期,并且该定时器处于循环模式(设置超时时间时struct itimerspec::it_interval不为0),那么调用此函数之后定时器重新开始计时。
read
当timerfd为阻塞方式时,read函数将被阻塞,直到定时器超时。
函数返回值大于0,代表定时器超时;否则,代表没有超时(被信号唤醒,等等)。
Read成功返回时,buf里存储的是一个8字节的无符号整数,该整数表示从上次被捕获到超时信号到现在超时的次数。
比如:it_value,it_interval分别设置为2,1, 程序运行开启定时器之后马上睡眠8秒,这是read的buf得到的值应该为7,表明已经超时7次。
poll/close
poll,close与标准文件操作相同。
题外话:另外linux-2.6.22内核也新增了signalfd函数,其目的也是和timer,Event一样的,创建可以监听的文件描述符。方面使用poll、select函数。
是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,所以能够被用于select/poll的应用场景。1. 使用方法
timerfd提供了如下接口供用户使用
timerfd_create
inttimerfd_create(int clockid, int flags);
timerfd_create用于创建一个定时器文件。
参数clockid可以是CLOCK_MONOTONIC或者CLOCK_REALTIME。
参数flags可以是0或者O_CLOEXEC/O_NONBLOCK。
(
O_CLOEXEC : 用于多线程,在创建新线程时,会拷贝原来线程打开的文件描述符,但是对于新线程来说并不需要,加上这个标志位以后,在创建线程时会自动关闭这些描述符。
)
函数返回值是一个文件句柄fd。
timerfd_settime
inttimerfd_settime(int ufd, int flags, const struct itimerspec * utmr, structitimerspec * otmr);
此函数用于设置新的超时时间,并开始计时。
参数ufd是timerfd_create返回的文件句柄。
参数flags为1代表设置的是绝对时间;为0代表相对时间。
参数utmr为需要设置的时间。
参数otmr为定时器这次设置之前的超时时间。
函数返回0代表设置成功。
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */
};
struct itimerspec {
struct timespecit_interval; /* Interval for periodictimer 第一次以后的超时周期*/
struct timespec it_value; /* Initial expiration 初次超时时间*/
};
比如it_value,it_interval分别设置为2,5,那么超时时间分别为2,7,12…
timerfd_gettime
inttimerfd_gettime(int ufd, struct itimerspec * otmr);
此函数用于获得定时器距离下次超时还剩下的时间。如果调用时定时器已经到期,并且该定时器处于循环模式(设置超时时间时struct itimerspec::it_interval不为0),那么调用此函数之后定时器重新开始计时。
read
当timerfd为阻塞方式时,read函数将被阻塞,直到定时器超时。
函数返回值大于0,代表定时器超时;否则,代表没有超时(被信号唤醒,等等)。
Read成功返回时,buf里存储的是一个8字节的无符号整数,该整数表示从上次被捕获到超时信号到现在超时的次数。
比如:it_value,it_interval分别设置为2,1, 程序运行开启定时器之后马上睡眠8秒,这是read的buf得到的值应该为7,表明已经超时7次。
poll/close
poll,close与标准文件操作相同。
题外话:另外linux-2.6.22内核也新增了signalfd函数,其目的也是和timer,Event一样的,创建可以监听的文件描述符。方面使用poll、select函数。
- linux新增timerfd接口详解
- linux新增特性timerfd
- linux中新增系统调用signalfd、timerfd、eventfd使用说明
- Linux : timerfd
- Linux的timerfd分析
- Linux的timerfd分析
- Linux的timerfd分析
- timerfd
- timerfd
- timerfd
- timerfd
- timerfd
- linux API---timerfd的使用方法
- linux新API---timerfd的使用方法
- Linux定时器描述符(timerfd)shiy
- linux 基于timerfd的纳秒级定时器
- linux新的API signalfd、timerfd、eventfd使用说明——timerfd
- linux网络接口详解
- makefile输出调试信息
- live555—VS2010 下live555编译、使用及测试
- c# 实现图像180度旋转
- 苏格拉底:“认识你自己”
- 如何修改tomcat7的端口和用户名密码?
- linux新增timerfd接口详解
- 15位身份证升18位身份证的Oracle函数
- OPen GL 学习 (一)2D纹理使用
- maven无法下载肯定存在的依赖
- Python学习资源
- 回合制游戏-------------------------------------------起步(一)
- oracle 查询锁住的表并解决
- 在编写控制台应用程序时,且要用MFC框架时添加的头文件
- JBOSS 配置 数据源JNDI