1b7a77849SAndy Fiddaman.\" 2b7a77849SAndy Fiddaman.\" This file and its contents are supplied under the terms of the 3b7a77849SAndy Fiddaman.\" Common Development and Distribution License ("CDDL"), version 1.0. 4b7a77849SAndy Fiddaman.\" You may only use this file in accordance with the terms of version 5b7a77849SAndy Fiddaman.\" 1.0 of the CDDL. 6b7a77849SAndy Fiddaman.\" 7b7a77849SAndy Fiddaman.\" A full copy of the text of the CDDL should have accompanied this 8b7a77849SAndy Fiddaman.\" source. A copy of the CDDL is also available via the Internet at 9b7a77849SAndy Fiddaman.\" http://www.illumos.org/license/CDDL. 10b7a77849SAndy Fiddaman.\" 11b7a77849SAndy Fiddaman.\" 12b7a77849SAndy Fiddaman.\" Copyright 2020 OmniOS Community Edition (OmniOSce) Association. 13b7a77849SAndy Fiddaman.\" 14*123e0aa3SPeter Tribble.Dd December 29, 2021 15*123e0aa3SPeter Tribble.Dt TIMESPEC 3HEAD 16b7a77849SAndy Fiddaman.Os 17b7a77849SAndy Fiddaman.Sh NAME 18b7a77849SAndy Fiddaman.Nm timespec , 19b7a77849SAndy Fiddaman.Nm timeval , 20b7a77849SAndy Fiddaman.Nm TIMESPEC_TO_TIMEVAL , 21b7a77849SAndy Fiddaman.Nm TIMEVAL_TO_TIMESPEC 22b7a77849SAndy Fiddaman.Nd time structures and conversion 23b7a77849SAndy Fiddaman.Sh SYNOPSIS 24b7a77849SAndy Fiddaman.In sys/time.h 25b7a77849SAndy Fiddaman.Ft void 26b7a77849SAndy Fiddaman.Fo TIMESPEC_TO_TIMEVAL 27b7a77849SAndy Fiddaman.Fa "struct timeval *tv" 28b7a77849SAndy Fiddaman.Fa "const struct timespec *ts" 29b7a77849SAndy Fiddaman.Fc 30b7a77849SAndy Fiddaman.Ft void 31b7a77849SAndy Fiddaman.Fo TIMEVAL_TO_TIMESPEC 32b7a77849SAndy Fiddaman.Fa "const struct timeval *tv" 33b7a77849SAndy Fiddaman.Fa "struct timespec *ts" 34b7a77849SAndy Fiddaman.Fc 35b7a77849SAndy Fiddaman.Sh DESCRIPTION 36b7a77849SAndy FiddamanThe 37b7a77849SAndy Fiddaman.Vt timeval 38b7a77849SAndy Fiddamanand 39b7a77849SAndy Fiddaman.Vt timespec 40b7a77849SAndy Fiddamanstructures are declared in the 41b7a77849SAndy Fiddaman.In time.h 42b7a77849SAndy Fiddamanand 43b7a77849SAndy Fiddaman.In sys/time.h 44b7a77849SAndy Fiddamanheaders respectively: 45b7a77849SAndy Fiddaman.Bd -literal -offset indent 46b7a77849SAndy Fiddamantypedef struct timespec { 47b7a77849SAndy Fiddaman time_t tv_sec; /* seconds */ 48b7a77849SAndy Fiddaman long tv_nsec; /* and nanoseconds */ 49b7a77849SAndy Fiddaman} timespec_t; 50b7a77849SAndy Fiddaman 51b7a77849SAndy Fiddamanstruct timeval { 52b7a77849SAndy Fiddaman time_t tv_sec; /* seconds */ 53b7a77849SAndy Fiddaman suseconds_t tv_usec; /* and microseconds */ 54b7a77849SAndy Fiddaman}; 55b7a77849SAndy Fiddaman.Ed 56b7a77849SAndy Fiddaman.Pp 57b7a77849SAndy FiddamanIn both cases, the 58b7a77849SAndy Fiddaman.Fa tv_sec 59b7a77849SAndy Fiddamanmember represents elapsed time in whole seconds. 60b7a77849SAndy FiddamanThe 61b7a77849SAndy Fiddaman.Fa tv_nsec 62b7a77849SAndy Fiddamanand 63b7a77849SAndy Fiddaman.Fa tv_usec 64b7a77849SAndy Fiddamanmembers represent the rest of the elapsed time in nanoseconds and 65b7a77849SAndy Fiddamanmicroseconds respectively, depending on the structure. 66b7a77849SAndy Fiddaman.Pp 67b7a77849SAndy FiddamanThe 68b7a77849SAndy Fiddaman.Dv TIMEVAL_TO_TIMESPEC 69b7a77849SAndy Fiddamanmacro can be used to convert a 70b7a77849SAndy Fiddaman.Vt struct timeval 71b7a77849SAndy Fiddamanstructure to a 72b7a77849SAndy Fiddaman.Vt struct timespec 73b7a77849SAndy Fiddamanstructure, while the 74b7a77849SAndy Fiddaman.Dv TIMESPEC_TO_TIMEVAL 75b7a77849SAndy Fiddamanmacro works in the opposite direction. 76b7a77849SAndy Fiddaman.Pp 77b7a77849SAndy FiddamanWhen converting from a 78b7a77849SAndy Fiddaman.Vt struct timespec 79b7a77849SAndy Fiddamanto a 80b7a77849SAndy Fiddaman.Vt struct timeval 81b7a77849SAndy Fiddamanstructure, the 82b7a77849SAndy Fiddaman.Fa tv_nsec 83b7a77849SAndy Fiddamanmember is truncated, losing precision. 84b7a77849SAndy FiddamanWhen converting from a 85b7a77849SAndy Fiddaman.Vt struct timeval 86b7a77849SAndy Fiddamanto a 87b7a77849SAndy Fiddaman.Vt struct timespec 88b7a77849SAndy Fiddamanstructure, the 89b7a77849SAndy Fiddaman.Fa tv_usec 90b7a77849SAndy Fiddamanmember is multiplied by 1000 to reach the precision of the target 91b7a77849SAndy Fiddamanstructure. 92b7a77849SAndy FiddamanThe 93b7a77849SAndy Fiddaman.Fa tv_sec 94b7a77849SAndy Fiddamanmember is always preserved, no matter which conversion is performed. 95b7a77849SAndy Fiddaman.Pp 96b7a77849SAndy FiddamanNote that the 97b7a77849SAndy Fiddaman.Dv TIMEVAL_TO_TIMESPEC 98b7a77849SAndy Fiddamanand 99b7a77849SAndy Fiddaman.Dv TIMESPEC_TO_TIMEVAL 100b7a77849SAndy Fiddamanmacros are non-standard but are commonly found on UNIX and UNIX-like systems. 101b7a77849SAndy Fiddaman.Sh INTERFACE STABILITY 102b7a77849SAndy Fiddaman.Sy Committed 103b7a77849SAndy Fiddaman.Sh MT-LEVEL 104b7a77849SAndy Fiddaman.Sy MT-Safe 105b7a77849SAndy Fiddaman.Sh SEE ALSO 106b7a77849SAndy Fiddaman.Xr time.h 3HEAD 107