TIMER_SETTIME - Linux手册页

时间:2019-08-20 17:59:35  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2020-06-09

名称

timer_settime,timer_gettime-POSIX每进程计时器的布防/撤防和获取状态

语法

#include <time.h>

int timer_settime(timer_t timerid, int flags,
                  const struct itimerspec *new_value,
                  struct itimerspec *old_value);
int timer_gettime(timer_t timerid, struct itimerspec *curr_value);

与-lrt链接。

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

timer_settime(),timer_gettime():_POSIX_C_SOURCE> = 199309L

说明

timer_settime()启用或撤消timerid标识的计时器。 new_value参数是指向itimerspec结构的指针,该结构指定计时器的新初始值和新间隔。 itimerspec结构定义如下:

struct timespec {
    time_t tv_sec;                /* Seconds */
    long   tv_nsec;               /* Nanoseconds */
};

struct itimerspec {
    struct timespec it_interval;  /* Timer interval */
    struct timespec it_value;     /* Initial expiration */
};

itimerspec结构的每个子结构都是一个timespec结构,该结构允许以秒和纳秒为单位指定时间值。这些时间值是根据使用timer_create(2)创建计时器时指定的时钟来测量的。

如果new_value-> it_value指定一个非零值(即,任何一个子字段都不为零),则timer_settime()会启动(启动)计时器,并将其设置为在给定时间最初过期。 (如果计时器已经设防,则先前的设置将被覆盖。)如果new_value-> it_value指定零值(即,两个子字段均为零),则取消计时器的设防。

new_value-> it_interval字段以秒和纳秒为单位指定计时器的周期。如果此字段为非零值,则每次设防计时器到期时,都会从new_value-> it_interval中指定的值中重新加载计时器。如果new_value-> it_interval指定零值,则计时器在it_value指定的时间仅过期一次。

默认情况下,在new_value-> it_value中指定的初始到期时间将相对于调用时计时器时钟上的当前时间进行解释。可以通过在标志中指定TIMER_ABSTIME来修改此值,在这种情况下,new_value-> it_value解释为在计时器时钟上测量的绝对值。也就是说,当时钟值达到new_value-> it_value指定的值时,计时器将过期。如果指定的绝对时间已经过去,则计时器将立即过期,并且溢出计数(请参见timer_getoverrun(2))将被正确设置。

如果在设防基于该时钟的绝对计时器时调整了CLOCK_REALTIME时钟的值,则将适当地调整计时器的到期时间。对CLOCK_REALTIME时钟的调整不会影响基于该时钟的相对计时器。

如果old_value不为NULL,则它指向一个缓冲区,该缓冲区用于返回计时器的上一个间隔(在old_value-> it_interval中)以及直到计时器之前下一个到期的时间(在old_value-> it_value中) 。

timer_gettime()返回由curr_value指向的缓冲区中timerid指定的计时器的下一个到期时间和间隔。 curr_value-> it_value返回直到下一个定时器到期为止的剩余时间;这始终是一个相对值,无论在布防定时器时是否使用了TIMER_ABSTIME标志。如果在curr_value-> it_value中返回的值为零,则计时器当前处于撤防状态。计时器间隔以curr_value-> it_interval返回。如果在curr_value-> it_interval中返回的值为零,则这是一个"一次性"计时器。

返回值

成功时,timer_settime()和timer_gettime()返回0。错误时,返回-1,并且设置errno以指示错误。

错误说明

这些功能可能会因以下错误而失败:

EFAULT
new_value,old_value或curr_value不是有效的指针。
EINVAL
超时无效。

timer_settime()可能因以下错误而失败:

EINVAL
new_value.it_value为负;或new_value.it_value.tv_nsec为负或大于999,999,999。

版本

这些系统调用自Linux 2.6起可用。

遵循规范

POSIX.1-2001,POSIX.1-2008。

示例

请参见timer_create(2)。

另外参见

timer_create(2),timer_getoverrun(2),time(7)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/