gpt4 book ai didi

c - Ubuntu 中 timeval 结构返回的时间是错误的

转载 作者:行者123 更新时间:2023-11-30 15:53:52 26 4
gpt4 key购买 nike

我试图查看选择函数监视文件所花费的时间,但是当我尝试打印它时,我得到一个很长的数字。这是代码:

struct timeval to;
to.tv_usec=25;
nfds=select(maxfds+1,&readset,NULL,NULL,&to);
printf("Time left for monitering the file descriptors %d\n",to);

这种奇怪行为的原因是什么?此代码与 to.tv_sec 配合使用效果良好。

enter image description here

问候

最佳答案

您不能以这种方式将结构传递给 printf()。传递其成员之一或从他们创建的值。

如果您跟踪 timeval 结构体的定义直至特定于实现的细节,您可能会发现如下内容:

struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};

这说明内存中有一个结构(至少在这个特定平台上),它由一个以秒为单位的值和一个微秒值组成。这两个值构成了结构体的成员。

诸如 select() 之类的函数需要提供一个指向结构本身的指针。指向第一个成员的指针通常可能具有与其值相同的原始内存地址,但不能正式或可移植地互换,如果误用作结构指针,则应导致警告。

像 printf() 这样的通用纯值函数不了解 timeval 结构,因此必须给出可以解释为它确实理解的数字类型的结构成员,或者通过组合结构成员创建的值。例如,使用这两个字段来计算以毫秒为单位的 64 位时间并使用 64 位 printf 格式说明符显示该时间是很常见的。

关于c - Ubuntu 中 timeval 结构返回的时间是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13442123/

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