Linux之利用文件描述符进行通知的定时器:timerfd API

目录

 

提问:

系统调用:

1、创建

2、设置

3、获取定时器时间间隔和剩余时间

4、timerfd与fork()及exec()之间的交互

5、通过read()从timefd文件描述符读取到期信息

测试代码:

何时使用?

参考资料:


提问:

  1. 如何使用timerfd API?
  2. 什么时候需要使用?

系统调用:

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 为底层的打开文件描述设置为非阻塞。

 

  1. 定时器使用完毕后,应调用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值