getnstimeofday 返回的最大值

Maximum value returned by getnstimeofday

我正在实现一个内核模块,我需要在其中测量某些事件之间的时间。为此,我使用函数 getnstimeofday 获取以纳秒为单位的当前时间戳。然后我计算两个事件之间的时间,例如:

nsecs_elapsed = t2 - t1;

但是,当纳秒计数器环绕(溢出并再次从零开始计数)时,计算不正确,在这种情况下,我得到的 t2 小于 t1。如果是这种情况,我想通过以下方式计算经过的纳秒数:

nsecs_elapsed = (POSSIBLE MAX_VALUE_TV_NSEC - t1) + (++t2);

其中 "POSSIBLE_MAX_VALUE_TV_NSEC" 应该是函数 getnstimeofday.

返回的最大可能值

现在,此函数(即 getnstimeofday)将此信息填充到 tv.nsec 成员中 struct timespec 变量(其地址必须作为参数传递给函数 getnstimeofday)。 因为 tv.nsec 是类型 long 我虽然 long 变量的最大值可以是这个函数返回的最大可能值,但根据我的观察,情况并非如此。

从这个函数(即 getnstimeofday)我总是得到纳秒数作为 9 位数字,所以我假设这个函数的最大值 returns 应该是 999999999,但我想对此进行一些确认。我在任何地方都没有找到这样的信息,在查看内核代码时,我仍然不清楚这个函数是否返回了一个最大可能值而不是 signed long.

有人知道 getnstimeofday 的返回值是否由某个最大值分隔吗? 或者您知道我可以在哪里查看此信息吗?

函数getnstimeofday填充结构中的两个字段

  • tv_sec总秒数,
  • tv_nsec 其余纳秒

这两个字段加起来不能溢出:需要几百年才能溢出tv_sec部分

由于一秒有10^9纳秒,所以tv_nsec字段的最大值是999999999,如你所料。