如果传递的参数始终为NULL,time_t time(time_t *t)
函数是否会返回失败?
如果通话为time(NULL)
,我们是否还需要检查返回值?
唯一记录的错误代码是EFAULT,它与指针无效有关。
答案 0 :(得分:22)
是。 "hello"
已记录可能失败案例:
如果出现以下情况,time()函数可能会失败:
[EOVERFLOW]自Epoch以来的秒数不适合time_t类型的对象。
来源:http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html
预计这将在大约22年内实现,不会在64位系统或使用64位time
的32位系统上实现。
此外,任何的存在都将失败或可能失败案例也允许实现定义的错误,尽管它们的存在将是一个严重的实施质量缺陷
time_t
是非问题/不存在的,因为只有当您的程序有未定义的行为时才会发生。
尽管如此,在现实世界中,EFAULT
实际上并没有失败。
答案 1 :(得分:5)
时间(NULL)是否会返回失败?
没有。 C标准说
C11:7.27.2.4:
time函数返回实现对当前日历时间的最佳近似值。如果日历时间不可用,则返回值
(time_t)(-1)
。
答案 2 :(得分:4)
我已经检查过RHEL,SLES和UBTU; man 2 page产生相同(相关)的东西:
time() returns the time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds.
If t is non-NULL, the return value is also stored in the memory pointed to by t.
无论如何,回到原来的问题
Q0 :如果传递的参数始终为NULL,time_t time(time_t *t)
函数是否会返回失败?
Q1 :如果调用是时间(NULL),我们还需要检查返回值吗?
Q2 :唯一记录的错误代码是EFAULT
,它与指针无效有关。
NULL
,所以没有问题。答案 3 :(得分:4)
在C标准中,如果"日历时间不可用,则time()
可以返回(time_t)(-1)
"。例如,在1999年的标准中,见第7.23.2.4节,第3段。
虽然这个措辞不够具体,但我认为它代表了一个错误的条件。假设一个实现可以返回(time_t)(-1)
,如果它无法访问系统时钟,可以理智地解释它获得的数据等等。
R的回答描述了posix规范的情况。
答案 4 :(得分:3)
(不考虑POSIX降级模式功能)
如果基础实时时钟子系统在单元在独立系统上关闭时发生硬件故障(例如时钟完整性(电池)丢失),则time()
的返回值肯定可能是{{1 }}。在这种情况下,(time_t) -1
传递的内容没有区别。