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