目录
提问:
- 如何使用timerfd API?
- 什么时候需要使用?
系统调用:
1、创建
#include <sys/timerfd.h>
int timerfd_create(int clockid, int flags)
成功返回文件描述符,失败返回-1 。
参数clockid
1、设置为CLOCK_REALTIME 可设定的系统级实时时钟,用于度量真实时间。
2、设置为CLOCK_MONOTONIC 不可设定的恒定态时钟,始于“未予规范的过去某一时间点”,系统启动后就不会改变。该时钟适用于那些无法容忍系统时钟发生跳跃性变化(如手工改变了系统时间)的应用程序。
参数flags 一般设置为0,Linux内核2.6.27版本后支持下面两种flags标志
1、TFD_CLOEXEC 为新文件描述符设置运行时关闭标志
2、TFD_NONBLOCK 为底层的打开文件描述设置为非阻塞。
- 定时器使用完毕后,应调用close()关闭相应的文件描述符,以便于内核释放与定时器相关的资源。
2、设置
#include <sys/timerfd.h>
int timerfd_settime(int fd, int flags, const struct itimerspec * new_value,
struct itimerspec * old_value);
参数new_value 为定时器指定新设置。
参数old_value 可用来返回定时器的前一设置
参数flags
1、可以为0,将new_value.it_value的值视为相对于调用timerfd_settime()时间点的相对时间。
2、可以为TFD_TIMER_ABSTIME,将其视为一个绝对时间(从时钟值0开始测量)。一旦时钟超过了这一时间,定时器会立即到期。
结构体:
struct itimerspec
{
struct timespec it_interval; //定时器的周期性到期时间
struct timespec it_value; //第一次到期时间
};
struct t