📜  #包括<sys time.h>int main() { timespec ts; clock_gettime(CLOCK_MONOTONIC, &amp;ts);在 FreeBSD 上工作 clock_gettime(CLOCK_REALTIME, &amp;ts);适用于 Linux } - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:13:01.883000             🧑  作者: Mango

包括<sys/time.h>int main() {

这段代码主要涉及到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的时间值较小。