如果未设置clock_settime,clock_gettime()是否有效?

时间:2019-04-15 16:38:05

标签: c++ c linux time real-time-clock

如果clock_settime()尚未设置时钟,clock_gettime()是否起作用?我遇到这样的情况,重复调用clock_gettime()会返回相同的时间值(秒)。我似乎记得我需要首先使用clock_settime()设置时间。另外clock_gettime()和time()是否使用相同的时间源?

clock_gettime(clockid_t clk_id, struct timespec *tp) - All  implementations  support  the system-wide real-time clock, which is identified by CLOCK_REALTIME.  Its time represents seconds and nanoseconds SINCE THE EPOCH.  When its time is changed, timers for a  relative  interval  are  unaffected,  but timers for an absolute point in time are affected.

time() - returns the time as the number of seconds SINCE THE EPOCH, 1970-01-01 00:00:00 +0000 (UTC).

代码为C,平台为Ubuntu 18.04。在这个问题中标记了C ++,因为据我所知,C ++没有提供获得高精度时间的方法(尽管C ++ 20可以做到),并且我将创建我的代码的C ++版本。

1 个答案:

答案 0 :(得分:3)

clock_settime设置整个计算机的时间。只有系统管理工具(例如GNOME Control Center)和时间同步守护程序(例如ntpd)才需要调用它。它需要超级用户权限;大多数程序无法成功调用它。

如果从未在特定计算机上调用clock_settime(或做同样工作的较旧的API之一),则clock_gettime返回的值很可能是错误与当前时间的一些权威来源进行比较。但是,无论时间是否准确,时钟都应该仍在运行。我不知道在Linux或其他操作系统上是否有任何API可以停止系统时钟。

但是,根据您使用的时钟ID,两次连续clock_gettime的调用中获得相同的值可能是正常的(不是错误或问题)。例如,如果两次通话之间的间隔短于clock_getres报告的时钟分辨率,则可能会发生这种情况。