📅  最后修改于: 2023-12-03 15:13:01.883000             🧑  作者: Mango
这段代码主要涉及到C语言中的时间函数,需要包含头文件<sys/time.h>
。
clock_gettime()
int clock_gettime(clockid_t clk_id, struct timespec *tp);
这个函数可以获得不同类型的时间。
其中clk_id
有三种选择:
CLOCK_REALTIME
表示系统实时时间,即墙上时钟时间。CLOCK_MONOTONIC
表示从系统启动(被重置)开始计算的时间,不受系统时间设置变化的影响。CLOCK_PROCESS_CPUTIME_ID
表示进程时间,即进程运行时间(本文不涉及)。tp
是一个指向timespec
结构体的指针,这个结构体包含了秒数和纳秒数。
timespec
结构体struct timespec {
time_t tv_sec; // 秒数
long tv_nsec; // 纳秒数
};
这个结构体包含了秒数和纳秒数,可以用来表示时间。
timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
这段代码中,首先定义了一个timespec
结构体的变量ts
,接着通过clock_gettime()
函数获得了系统从启动到现在的时间,并将该时间存储在变量ts
中。
在 FreeBSD 上工作 clock_gettime(CLOCK_REALTIME, &ts);
适用于 Linux
这段代码是在介绍clock_gettime()
函数的两种使用方式。如果要在FreeBSD系统上使用该函数获取系统时间,应该使用CLOCK_REALTIME
;而在Linux系统上使用该函数时,应该使用CLOCK_MONOTONIC
。
完整代码如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
printf("CLOCK_MONOTONIC: %ld.%09ld\n", ts.tv_sec, ts.tv_nsec);
clock_gettime(CLOCK_REALTIME, &ts);
printf("CLOCK_REALTIME: %ld.%09ld\n", ts.tv_sec, ts.tv_nsec);
return 0;
}
代码输出如下:
CLOCK_MONOTONIC: 167778.586544842
CLOCK_REALTIME: 1622715467.333416509
其中,CLOCK_MONOTONIC
获得的时间是从系统启动(被重置)开始计算的,单位为秒。CLOCK_REALTIME
获得的时间与系统时间相同,单位为秒。由于本人的系统运行时间较长,CLOCK_MONOTONIC
的时间值较大,CLOCK_REALTIME
的时间值较小。