clock_gettime( CLOCK_REALTIME .... )和time()之间有什么区别?
clock_gettime( CLOCK_REALTIME .... )和time()之间有什么区别?
一个简单的问题:在理论上(仅考虑秒),time(...)
和clock_gettime( CLOCK_REALTIME, ... )
产生的时间是相同的吗?
这是我的意思:
time_t epoch; time( &epoch );
和
struct timespec spec; clock_gettime( CLOCK_REALTIME, &spec );
这两个函数应该返回完全相同的结果吗(只考虑秒)?
我通过改变时间和时区进行“测试”,epoch
和spec.tv_sec
总是显示相同的结果,但是CLOCK_REATIME
的文档让我有点困惑,我不能确定它们是否会始终相同。
现实世界的情况是:我有一段代码,使用了time
函数。现在我想要以毫秒为单位的时间(可以通过spec.tv_nsec
乘以1000000来获得)。所以我考虑移除time
并直接使用clock_gettime
,但我不确定在所有情况下是否保持不变。
这个问题与在Linux中测量时间 - time vs clock vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?有些关联,但那里的信息对我来说不够...我认为。
任何区别在于clock_gettime(CLOCK_REALTIME....)和time()之间吗?
clock_gettime()和time()函数都用于获取系统时间,但它们使用的源是不同的。clock_gettime()函数是glibc库中的一个函数,它通过调用gettimeofday()函数来获取系统时间,而gettimeofday()函数又是由一个名为clock_gettime()的系统调用来实现的。而time()函数则是一个系统调用,直接调用了get_seconds()函数来获取系统时间。这两个函数获取的时间都来自于同一个时钟源,即系统的实时时钟。
clock_gettime()函数可以传入不同的时钟ID作为参数,其中一个可能的值就是CLOCK_REALTIME。而time()函数没有参数,它会直接调用get_seconds()函数来获取系统时间。
但需要注意的是,上述对clock_gettime()函数的描述是错误的。clock_gettime()函数实际上是一个位于VDSO(Virtual Dynamic Shared Object)中的函数,它使用一个名为__vdso_clock_gettime()的函数来获取系统时间,而不是调用gettimeofday()函数。这个函数具有纳秒级的分辨率,而gettimeofday()函数只有微秒级的分辨率。
虽然clock_gettime()和time()函数使用了不同的实现方式,但它们获取的系统时间来自于同一个时钟源,即系统的实时时钟。