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