簡體   English   中英

什么時候可以在Linux上調用時間(NULL)失敗

[英]When could a call to time(NULL) fail on Linux

根據此文檔http://www.cplusplus.com/reference/clibrary/ctime/time/

for time(NULL)“如果函數無法檢索日歷時間,則返回-1值。”

這是我應該在我的代碼中檢查的內容嗎? 如果時間(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;
}

Ubuntu手冊頁說time(2)可能由於EFAULT (“ t指向可訪問的地址空間之外” time(2)而失敗。

OSX手冊頁說它可能會失敗的原因與gettimeofday相同,它們是EFAULTEPERM (不確定這是如何適用於time )。

因此,根據上述系統的文檔,它不能因NULL的參數而失敗。

此外, POSIX對此功能完全沒有指定錯誤條件。

你有一個叫做系統時鍾的東西。 如果那個被打破了,那么這將失敗,盡管還有許多其他原因。

明顯的情況是內部時鍾需要外部初始化的系統(例如使用NTP)。 在此之前,內部時鍾不能提供歷元相對值,盡管它可用於測量間隔。 time_t是epoch-relative,因此在這種情況下time(NULL)必須失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM