我需要使用两个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信息 将输出传递给调用函数。我的目标不是修改结果结构。
答案 0 :(得分:2)
tv_sec
和tv_usec
的大小可能会因您所使用的系统而异。为避免这种情况,您不应使用int
来存储其值。您应该使用适当的类型 - 即time_t
和suseconds_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的评论,我将原来的答案修改为更完整/更正。