clock_gettime
是一个用于获取系统时间的函数,能够读取多种时钟,包括单调时钟、实时钟等。在您的示例中,您使用了 CLOCK_MONOTONIC
,表示获取自系统启动以来经过的时间。这个时钟是单调的,因此不会受到系统时间调整(如 NTP 服务器同步)的影响。
函数原型
#include <time.h>
int clock_gettime(clockid_t clk_id, struct timespec *tp);
参数说明
clk_id: 指定要读取的时钟类型,可以是以下值之一:
CLOCK_REALTIME
: 系统实时时间。CLOCK_MONOTONIC
: 从系统启动到现在所经过的时间,不受系统时间调整影响。CLOCK_PROCESS_CPUTIME_ID
: 当前进程消耗的 CPU 时间。CLOCK_THREAD_CPUTIME_ID
: 当前线程消耗的 CPU 时间。
tp: 指向一个
struct timespec
的指针,用于存储返回的时间值。timespec
结构定义如下:
struct timespec {
time_t tv_sec; // 秒数
long tv_nsec; // 纳秒数
};
返回值
成功时返回 0;失败则返回 -1,并设置 errno,以指示错误原因。
示例代码
下面是一个简单示例,演示如何使用 clock_gettime
获取单调时钟的当前时间:
#include <stdio.h>
#include <time.h>
int main() {
struct timespec nw;
// 获取单调时钟当前时间
if (clock_gettime(CLOCK_MONOTONIC, &nw) == -1) {
perror("clock_gettime");
return 1;
}
printf("Current monotonic time: %ld.%09ld seconds since system boot\n",
(long)nw.tv_sec, nw.tv_nsec);
return 0;
}
注意事项
CLOCK_MONOTONIC
不会提供具体的日期和时间,只表示从系统启动到现在所经过的时间。如果需要获取实际日期和时间,请使用CLOCK_REALTIME
。- 在高精度计时要求下,如果纳秒级别不够,也可以考虑使用其他更精确的方法(如高分辨率计时器)。
- 确保在 Linux 环境下编译并运行此代码,因为某些平台可能不支持所有类型的计时器。
内容由零声教学AI助手提供,问题来源于学员提问