TIMESPEC(3type) TIMESPEC(3type)

timespec - time in seconds and nanoseconds

Standard C library (libc)

#include <time.h>
struct timespec {
    time_t  tv_sec;   /* Seconds */
    long    tv_usec;  /* Nanoseconds [0, 999999999] */
};

Describes times in seconds and nanoseconds.

C11 and later; POSIX.1-2001 and later.

The following headers also provide this type: <aio.h>, <mqueue.h>, <sched.h>, <signal.h>, <sys/select.h>, and <sys/stat.h>.

Under glibc, tv_nsec is the syscall long, though this affects only fringe architectures like X32, which is ILP32, but uses the LP64 AMD64 syscall ABI. In reality, the field ends up being defined as:


#if __x86_64__ && __ILP32__  /* == x32 */

    long long  tv_nsec;
#else

    long       tv_nsec;
#endif

This is a long-standing and long-enshrined glibc bug #16437, and an incompatible extension to the standards; however, as even a 32-bit long can hold the entire tv_nsec range, it's always safe to forcibly down-cast it to the standard type.

clock_gettime(2), clock_nanosleep(2), nanosleep(2), timerfd_gettime(2), timer_gettime(2), time_t(3type), timeval(3type)

2022-09-09 Linux man-pages 6.00