我正在将一个 C 项目从 Solaris 移植到 Linux 并重新编译它。在 logger.c 中,sys/time.h 的 gethrtime() 函数不能为 Linux 编译。如何将其移植到 Linux?在 Linux 中是否有替代品?

最佳答案

您正在寻找的功能是 clock_gettime :

struct timespec t;
if (clock_gettime(CLOCK_MONOTONIC, &t) == -1) {
    perror("clock_gettime for CLOCK_MONOTONIC failed");
} else {
    printf("mono clock timestamp: %ld.%09ld\n", t.tv_sec, t.tv_nsec);
}
CLOCK_MONOTONIC 参数从未指定的起点获取时间。这与获取挂钟时间的 CLOCK_REALTIME 不同。

在大多数实现中,分辨率将以纳秒为单位,但是您可以通过调用 clock_getres 找到确切的分辨率:
struct timespec t;
if (clock_getres(CLOCK_MONOTONIC, &t) == -1) {
    perror("clock_getres for CLOCK_MONOTONIC failed");
} else {
    printf("mono clock resolution: %ld.%09ld\n", t.tv_sec, t.tv_nsec);
}

关于c - 如何将 C 中的 gethrtime() 从 Solaris 移植到 RHEL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49241839/

10-12 03:41