根据这份文档http://www.cplusplus.com/reference/clibrary/ctime/time/,对于time(NULL),如果函数无法检索到日历时间,则返回-1值。在我的代码中是否应该检查这个呢?如果time(NULL)无法检索到时间,肯定是出了什么大问题了。
你可能正在运行没有实时时钟的嵌入式设备。
glibc源代码声称在Linux上时间系统调用不会失败:
time_t res = INTERNAL_SYSCALL (time, err, 1, NULL);
/* There cannot be any error. */
如果你查看内核源代码,确实是这种情况:
SYSCALL_DEFINE1(time, time_t __user *, tloc)
{
time_t i = get_seconds();
if (tloc) {
if (put_user(i,tloc))
return -EFAULT;
}
force_successful_syscall_return();
return i;
}
time(2)
可能由于 EFAULT
("t
指向的地址位于不可访问的地址空间之外")导致失败。gettimeofday
相同的原因而失败,这些原因是 EFAULT
和 EPERM
(不确定它如何应用于 time
)。NULL
参数而失败。一个明显的情况是,系统的内部时钟需要外部初始化(例如使用NTP)。 在此之前,内部时钟无法提供相对于纪元的值,尽管它可以用于测量间隔。 time_t
是相对于纪元的,因此在这种情况下必须使 time(NULL)
失败。
/dev/time/
设备的操作系统,当读取该设备时会给出当前时间。在初始化之前,您将在设备上获得读取错误。标准的C库在调用time()
时会传递这个失败信息。 - MSalters