时间(NULL)是否会返回失败?

时间:2015-12-16 03:35:59

标签: c time posix

如果传递的参数始终为NULL,time_t time(time_t *t)函数是否会返回失败?

如果通话为time(NULL),我们是否还需要检查返回值?

唯一记录的错误代码是EFAULT,它与指针无效有关。

5 个答案:

答案 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)函数是否会返回失败?

    • A / R0 ,如果发生了一些非常特殊的事件(内存已满,等等......)
  • Q1 如果调用是时间(NULL),我们还需要检查返回值吗?

    • A / R1 :实际答案为“否”,您不必;事实上,功能可以返回相关的东西,这是一个不同的故事。毕竟,如果不需要这样做,为什么要调用func?
  • 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传递的内容没有区别。