将 Timeval 成员变量复制到整数变量

copy timeval member variables to integer variable

本文关键字:变量 整数 复制 成员 Timeval      更新时间:2023-10-16

我需要使用两个integer参数 p1 和 p2 表示timeval结构。我已将tv_sec复制到 p1 和 tv_usec复制到 p2。在 32 位(centos(sizeof(long) = sizeof(int)因此我能够做上面所说的事情。

但在 64 位系统中,(sizeof(tv_sec( = 8(。

在 64 位系统中,如何将此tv_sec分配给 p1 和 p2 作为 32 位系统的 p2

我的代码如下,

#include <iostream>
#include <sys/time.h>
using namespace std;
int main()
{
  struct timeval mytime;
  gettimeofday(&mytime, NULL);
  cout << "tv_sec_1 :  " << mytime.tv_sec << endl;
  cout << "tv_usec_1 : " << mytime.tv_usec << endl;
  int p1 = mytime.tv_sec;
  int p2 = mytime.tv_usec;
}

我需要在结构中使用两个自由整数变量传递这些 timeval 信息通过它输出传递给调用函数。我的目的不是修改结果结构。

tv_sectv_usec的大小可能会根据您所在的系统而变化。为了避免这种情况,您不应该使用int来存储它们的值。您应该使用适当的类型 - 即 time_tsuseconds_t

您的代码应该是:

time_t p1 = mytime.tv_sec;
suseconds_t p2 = mytime.tv_usec;

有关这方面的信息可以在人员和信息页面中找到。此链接包含有关正确使用时间函数的信息。特别是他们对time_tint有这样的说法:

在行为上与"int"完全相同。您可以分配 int 值 到 time_t 变量,反之亦然,time_t并使用 %d 格式,以及所有内容。 将来,要么time_t将不再与 int 相同,要么 "int"的含义将从 4 字节整数变为 8 字节整数

由于Mike Seymour的评论,我修改了我原来的答案,使其更完整/正确。