【发布时间】:2015-11-01 21:49:43
【问题描述】:
我想要以微秒为单位的当前系统时间,所以我使用 clock_gettime 编写了一个程序,但它有时会返回负值。有人可以帮我解决这个问题。
int main(void) {
struct timespec tms;
/* The C11 way */
/* if (! timespec_get(&tms, TIME_UTC)) { */
/* POSIX.1-2008 way */
if (clock_gettime(CLOCK_REALTIME,&tms)) {
return -1;
}
/* seconds, multiplied with 1 million */
long long micros = tms.tv_sec * 1000000;
/* Add full microseconds */
micros += tms.tv_nsec/1000;
printf("Microseconds: %lld\n",micros);
return 0;
}
【问题讨论】:
-
你不应该使用
%llu吗? -
查看
time_t的大小(tv_sec的类型)。如果你为 32 位 Linux 编译,它只会是 32 位。 -
为了扩展@Mat 的准确评论,您应该写
1000000LL以强制将乘法作为long long完成。如果time_t是32位类型,则乘法将作为32位乘法(有溢出)进行,(溢出)结果之后会转换为long long。 -
哦,好吧。我得到了它。有效。谢谢。
-
@Devendar 如果您找到了解决方案,请考虑为您的问题添加答案。这将有助于 StackOverflow,它首先帮助了您。
标签: c linux operating-system timestamp