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

C times()系统调用。溢出返回值,c,linux,C,Linux,如果可能的时钟溢出,将返回哪个值 假设我使用的是内核2.6版本,arch是x86 32位。 sizeofsigned long=4字节。 最大值=2147483647 根据手册页-,syscall times返回自过去任意点以来经过的时钟滴答数 在下面提到的注释部分中:在Linux上,过去测量时间返回值的任意点在不同的内核版本中有所不同。从Linux2.6开始,这一点是系统启动前2^32/HZ-300秒 所以,假设HZ=100,我不明白十进制表示法中的什么值是起点。以及溢出后的返回值。由于我还不

如果可能的时钟溢出,将返回哪个值

假设我使用的是内核2.6版本,arch是x86 32位。 sizeofsigned long=4字节。 最大值=2147483647

根据手册页-,syscall times返回自过去任意点以来经过的时钟滴答数

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


所以,假设HZ=100,我不明白十进制表示法中的什么值是起点。以及溢出后的返回值。

由于我还不能发表评论,我希望这个答案有一些用处。。据此,

times返回自事件发生后经过的时钟滴答数 过去的任意点。返回值可能会溢出 时钟类型的可能范围。错误时,返回时钟_t-1, 并且errno被适当地设置

所以它可以溢出,是的,当它溢出时,它将从+2147483647变为+2147483647−2147483647,如果返回为无符号长字符,则继续沿正方向勾选。然而,溢出后有符号整数是未定义的,这是由于编译器为优化而以不同方式处理它们


如果我的假设是正确的,它可能会多次溢出,这意味着如果未签名,则溢出后的值可能无效,或者如果已签名,则该值将是未定义的随机值。

据我所知,C中有符号类型的溢出是未指定的。所以,我认为这个案例是由相应的内核处理程序处理的。这是未定义的行为。是的,很抱歉我修改了答案。我所理解的是,在Linux>2.6的引导时间后几分钟就出现了溢出,我想这是为了最大化可用窗口,但我不确定为什么。