当前位置: C语言 -- 标准库 -- <time.h> -- timespec_get

timespec_get函数


概要:
#include <time.h>
int timespec_get(struct timespec *ts, int base);

描述:

该函数将参数ts指向的间隔时间设置为基于参数base指定时间基准的当前日历时间。

如果参数base为TIME_UTC,结构成员ts->tv_sec设置为自实现定义时间以来的秒数,并截断为整数值;结构成员ts->tv_nsec设置为单位是纳秒的整数,并按系统时钟的分辨率进行舍入。尽管struct timespec类型对象使用纳秒分辨率描述时间,但实际分辨率与系统有关,甚至可能大于1秒。

可选时间基准TIME_MONOTONIC与时间基准TIME_UTC相同,即同样用于获取当前日历时间;但其参考点是实现定义的时间点,不同的程序调用可以使用相同或者不同的参考点。通常情况下该参考点是执行环境的启动时间或者程序执行的开始时间。

对于同一次程序调用,如果两次以TIME_MONOTONIC调用timespec_get函数,并且第一次调用发生在第二次调用之前,其结果不应递减。使用TIME_MONOTONIC时间基准时,执行环境被挂起的时间是否计入将由实现定义,例如:执行环境可能无法追踪低功耗模式下挂起期间流逝的物理时间。

对于可选的时间基准TIME_ACTIVE和TIME_THREAD_ACTIVE,结果类似;但调用分别测量的是与整个程序调用相关联的活跃处理时间或者与线程调用相关联的活跃处理时间。


参数:
struct timespec *ts

参数为指向struct timespec类型对象的指针。

int base

参数为宏TIME_UTC或者其它表示时间基准的非0整数值。


返回值:

如果调用成功,函数返回非0值base;否则函数返回0。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
/*函数timespec_get范例*/

#include <stdio.h>
#include <time.h>

#define LENGTH 80

int main(void)
{
    char buffer[LENGTH];
    struct timespec ts;

    timespec_get(&ts,TIME_UTC);
    strftime(buffer, sizeof(buffer),"%F %T", gmtime(&ts.tv_sec));
    printf("Current time:%s.%09ld UTC\n", buffer, ts.tv_nsec);

    return 0;
}


输出:

Current time:2017-06-29 11:21:03.790182200 UTC


相关内容:
struct timespec 表示时间的结构类型。
TIME_UTC 表示以UTC时间为基准的整数常量的宏。
timespec_getres 获取对于指定时间基准的时间分辨率的函数。
TIME_MONOTONIC 表示以单调时间为基准的整型常量的宏。
TIME_ACTIVE 表示以总执行时间为基准的整型常量的宏。
TIME_THREAD_ACTIVE 表示以线程特定活动处理时间为基准的整型常量的宏。


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018