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

时间:2014-09-24 16:02:28

标签: c++

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

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

在64位系统中,如何将此tv_sec指定为p1和p2为32位系统?

我的代码如下,

#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信息 将输出传递给调用函数。我的目标不是修改结果结构。

1 个答案:

答案 0 :(得分:2)

tv_sectv_usec的大小可能会因您所使用的系统而异。为避免这种情况,您不应使用int来存储其值。您应该使用适当的类型 - 即time_tsuseconds_t

您的代码应为:

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

有关此内容的信息可在man和info页面中找到。此link包含有关正确使用时间函数的信息。特别是他们可以说time_t vs int

  

与&#34; int&#34;完全相同在行为。您可以指定int值          到time_t变量,反之亦然,并使用打印time_t值          %d格式,以及一切。          将来,time_t将不再与int相同,或者          &#34; int&#34;的含义将从4字节整数更改为8字节整数

由于Mike Seymour的评论,我将原来的答案修改为更完整/更正。