Salgar
Salgar

Reputation: 7775

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

According to this documentation http://www.cplusplus.com/reference/clibrary/ctime/time/

for time(NULL) "If the function could not retrieve the calendar time, it returns a -1 value."

Is this something I should check for in my code? Surely something has got to be going pretty wrong if time(NULL) is not retrieving the time.

Upvotes: 7

Views: 1881

Answers (4)

MSalters
MSalters

Reputation: 179917

The obvious case would be a system whose internal clock requires external initialization (using eg. NTP). Until this has happened, the internal clock cannot give epoch-relative values, although it can be used to measure intervals. time_t is epoch-relative and therefore time(NULL) must fail in this case.

Upvotes: 0

atomice
atomice

Reputation: 3112

You may be running on an embedded device that doesn't have a real-time clock.

The glibc source code claims that the time syscall can't fail on Linux:

 time_t res = INTERNAL_SYSCALL (time, err, 1, NULL);
  /* There cannot be any error.  */

and indeed this is the case if you look at the kernel source:

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;
}

Upvotes: 17

Alex B
Alex B

Reputation: 84842

Ubuntu man page says time(2) can fail due to EFAULT ("t points outside your accessible address space").

OSX man page says it can fail for the same reasons as gettimeofday, which are EFAULT and EPERM (not sure how this applies to time).

Therefore, it cannot fail for the argument of NULL, according to the documentation of aforementioned systems.

Also, POSIX specifies no error conditions at all for this function.

Upvotes: 2

aviraldg
aviraldg

Reputation: 9154

You have something called a system clock. If that's broken, then this will fail, though there could be many other reasons.

Upvotes: 0

Related Questions