我希望将timeval字段附加到我的自定义数据包头中。面对类型转换问题。
标题中的我的自定义字段
struct pkthdr {
uint64_t sec;
uint64_t usec;
}
Linux timeval结构
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
}
初始化
struct pkthdr *hdr;
struct timeval *tm;
gettimeofday(&tm, 0);
hdr->sec = htonl(tm->tv_sec);
hdr->usec = htonl(tm->tv_usec);
以下几行导致细分错误
hdr->sec = htonl(tm->tv_sec);
hdr->usec = htonl(tm->tv_usec);
答案 0 :(得分:0)
您已经创建了指向struct timeval
和struct pkthdr
的指针,但是实际上并未分配任何指向的内存,因此当您尝试为{{1}赋值时,您将调用未定义的行为。 }和hdr->sec
在传递hdr->usec
而不是gettimeofday
时,您还将错误的类型传递给struct timeval **
。
请尝试创建实际的结构,而不是指向它们的指针:
struct timeval
检查并确保struct pkthdr hdr;
struct timeval tm;
gettimeofday(&tm, NULL);
hdr.sec = htonl(tm.tv_sec);
hdr.usec = htonl(tm.tv_usec);
和hdr.sec
中的数据确实是您想要的,因为这可能是不正确的。对于hdr.usec
的使用,我有些保留,因为它处理32位数据,而您的预期结果是64位。