TIMESPEC(3type) | TIMESPEC(3type) |
NAME¶
timespec - time in seconds and nanoseconds
LIBRARY¶
Standard C library (libc)
SYNOPSIS¶
#include <time.h>
struct timespec { time_t tv_sec; /* Seconds */ long tv_usec; /* Nanoseconds [0, 999999999] */ };
DESCRIPTION¶
Describes times in seconds and nanoseconds.
STANDARDS¶
C11 and later; POSIX.1-2001 and later.
NOTES¶
The following headers also provide this type: <aio.h>, <mqueue.h>, <sched.h>, <signal.h>, <sys/select.h>, and <sys/stat.h>.
BUGS¶
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.
SEE ALSO¶
clock_gettime(2), clock_nanosleep(2), nanosleep(2), timerfd_gettime(2), timer_gettime(2), time_t(3type), timeval(3type)
2022-10-09 | Linux man-pages 6.01 |