times()系统调用。返回值溢出

时间:2019-02-05 14:52:50

标签: c linux

如果clock_t(又名带符号的长整数)范围可能溢出,将返回哪个值?

让我们假设我使用内核2.6版本,而arch是x86(32位)。 sizeof(signed long)= 4个字节。 最大值= 2147483647。

根据手册页here,系统调用 times()返回自过去任意点以来经过的时钟滴答数。

“注释” 部分中提到以下内容:“在Linux上,从中测量times()的返回值的“过去的任意点”在内核版本之间有所不同。从Linux 2.6开始,这一点是(2 ^ 32 / HZ)-系统启动时间之前300秒。

因此,我不知道十进制表示形式中的哪个值将作为起点(假设HZ = 100)。溢出后返回什么值。

1 个答案:

答案 0 :(得分:0)

由于我目前还不能发表评论,我希望这个答案是有用的..根据此man

  

times()返回自          过去的任意点。返回值可能会溢出          类型clock_t的可能范围。出错时,返回(clock_t)-1,          并正确设置了errno。

是的,它会溢出,当返回为 unsigned long时,它将从 +2,147,483,647 变为 −2,147,483,647 ,并继续朝着积极的方向变动。但是, 有符号整数 在溢出后未定义,这是由于编译器对here的优化处理不同。

如果我的假设正确,那么它可能会多次溢出,这意味着如果 unsigned ,则您的值在溢出后可能无效,否则该值将是不确定的 )(如果 签名 )。