为什么gettimeofday()和time_t没有意义?

时间:2012-02-02 01:50:24

标签: linux time openwrt

为什么我要执行以下操作:

struct timeval time;

gettimeofday(&time, NULL);

log("time seconds %i useconds %i", sizeof(time.tv_seconds), sizeof(time.tv_usec));

它是否在openwrt中返回:

time seconds 4 useconds 4259840

time.tv_usec使用4259840字节吗? tv_seconds(因为epoch)有意义,因为它是一个很长的int。但tv_usec应始终低于100万。

2 个答案:

答案 0 :(得分:3)

sizeof运算符会返回size_t个对象。您应该使用%zu格式将其打印出来,而不是%i。由于格式字符串和参数类型不匹配,你很可能会遇到一些参数传递不幸事件。如果你在编译器上提高警告级别,你应该收到警告。例如,clang告诉我:

example.c:7:25: error: conversion specifies type 'int' but the argument has type
      'unsigned long' [-Werror,-Wformat]
  printf("time seconds %i useconds %i\n", sizeof(time.tv_sec), ...
                       ~^                 ~~~~~~~~~~~~~~~~~~~
                       %lu                                     

当然,这可能取决于您的log()功能的实施方式 - 这也可能是您的错误来源。

答案 1 :(得分:1)

凝视我的水晶球...问题是你的日志功能错误地解析了它的参数。请尝试使用printf。