gpt4 book ai didi

c - select 调用在 HPUX ia64 上超时

转载 作者:行者123 更新时间:2023-11-30 14:27:02 26 4
gpt4 key购买 nike

我在我的程序中使用了 select 调用,它适用于大多数 UNIX 风格。但是,它在一个 HPUX ia64 机器上工作,但在另一个机器上立即超时。

经过几次重新构建,我明白我已经设置了 tv_sec 但没有设置 timeval 结构的 tv_usec 。将timeval结构体的tv_usec成员设置为0后,它开始在所有平台上工作。

但是,我不明白为什么程序在相同的操作系统上表现不同?如何仅通过设置 tm.tv_usec = 0 来解决问题?

最佳答案

tv_sectv_usec 是有符号的 int 值,因此它们可以是负数。

如果你的结构是一个局部变量,它将包含发生的任何事情在堆栈上。

select 中,时间的秒部分计算如下(取自 the Linux source code ):

  tv.tv_sec + (tv.tv_usec / USEC_PER_SEC)

如您所见,不会检查数字是否为正数,因此如果未初始化的变量碰巧包含一个大负数,select 将立即返回。

编辑:

使用未初始化的变量会导致未定义的行为。 select 在一台机器上立即返回,而不是在另一台机器上返回,因此符合 C 规范。

关于c - select 调用在 HPUX ia64 上超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8242104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com