[英]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
相同,它們是EFAULT
和EPERM
(不確定這是如何適用於time
)。
因此,根據上述系統的文檔,它不能因NULL
的參數而失敗。
此外, POSIX對此功能完全沒有指定錯誤條件。
你有一個叫做系統時鍾的東西。 如果那個被打破了,那么這將失敗,盡管還有許多其他原因。
明顯的情況是內部時鍾需要外部初始化的系統(例如使用NTP)。 在此之前,內部時鍾不能提供歷元相對值,盡管它可用於測量間隔。 time_t
是epoch-relative,因此在這種情況下time(NULL)
必須失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.