]>
Commit | Line | Data |
---|---|---|
2b778ceb | 1 | /* Copyright (C) 1991-2021 Free Software Foundation, Inc. |
ba1ffaa1 | 2 | This file is part of the GNU C Library. |
28f540f4 | 3 | |
ba1ffaa1 | 4 | The GNU C Library is free software; you can redistribute it and/or |
41bdb6e2 AJ |
5 | modify it under the terms of the GNU Lesser General Public |
6 | License as published by the Free Software Foundation; either | |
7 | version 2.1 of the License, or (at your option) any later version. | |
28f540f4 | 8 | |
ba1ffaa1 UD |
9 | The GNU C Library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
41bdb6e2 | 12 | Lesser General Public License for more details. |
28f540f4 | 13 | |
41bdb6e2 | 14 | You should have received a copy of the GNU Lesser General Public |
59ba27a6 | 15 | License along with the GNU C Library; if not, see |
5a82c748 | 16 | <https://www.gnu.org/licenses/>. */ |
28f540f4 RM |
17 | |
18 | /* | |
d1646309 | 19 | * ISO C99 Standard: 7.23 Date and time <time.h> |
28f540f4 RM |
20 | */ |
21 | ||
22 | #ifndef _TIME_H | |
05b68e14 | 23 | #define _TIME_H 1 |
28f540f4 | 24 | |
05b68e14 | 25 | #include <features.h> |
28f540f4 | 26 | |
05b68e14 ZW |
27 | #define __need_size_t |
28 | #define __need_NULL | |
29 | #include <stddef.h> | |
28f540f4 | 30 | |
f8cac037 | 31 | /* This defines CLOCKS_PER_SEC, which is the number of processor clock |
05b68e14 ZW |
32 | ticks per second, and possibly a number of other constants. */ |
33 | #include <bits/time.h> | |
91bc38d0 | 34 | |
05b68e14 ZW |
35 | /* Many of the typedefs and structs whose official home is this header |
36 | may also need to be defined by other headers. */ | |
37 | #include <bits/types/clock_t.h> | |
38 | #include <bits/types/time_t.h> | |
39 | #include <bits/types/struct_tm.h> | |
28f540f4 | 40 | |
05b68e14 ZW |
41 | #if defined __USE_POSIX199309 || defined __USE_ISOC11 |
42 | # include <bits/types/struct_timespec.h> | |
7a5affeb | 43 | #endif |
28f540f4 | 44 | |
05b68e14 ZW |
45 | #ifdef __USE_POSIX199309 |
46 | # include <bits/types/clockid_t.h> | |
47 | # include <bits/types/timer_t.h> | |
48 | # include <bits/types/struct_itimerspec.h> | |
252ff6b6 | 49 | struct sigevent; |
05b68e14 | 50 | #endif |
252ff6b6 | 51 | |
05b68e14 ZW |
52 | #ifdef __USE_XOPEN2K |
53 | # ifndef __pid_t_defined | |
094f72c6 | 54 | typedef __pid_t pid_t; |
05b68e14 | 55 | # define __pid_t_defined |
74033a25 | 56 | # endif |
05b68e14 | 57 | #endif |
74033a25 | 58 | |
05b68e14 | 59 | #ifdef __USE_XOPEN2K8 |
f0be25b6 | 60 | # include <bits/types/locale_t.h> |
05b68e14 | 61 | #endif |
74033a25 | 62 | |
05b68e14 | 63 | #ifdef __USE_ISOC11 |
74033a25 | 64 | /* Time base values for timespec_get. */ |
7a270350 | 65 | # define TIME_UTC 1 |
05b68e14 | 66 | #endif |
094f72c6 | 67 | |
05b68e14 | 68 | __BEGIN_DECLS |
be1dd949 | 69 | |
28f540f4 | 70 | /* Time used by the program so far (user time + system time). |
09e56b9e | 71 | The result / CLOCKS_PER_SEC is program time in seconds. */ |
c1422e5b | 72 | extern clock_t clock (void) __THROW; |
28f540f4 RM |
73 | |
74 | /* Return the current time and put it in *TIMER if TIMER is not NULL. */ | |
c1422e5b | 75 | extern time_t time (time_t *__timer) __THROW; |
28f540f4 RM |
76 | |
77 | /* Return the difference between TIME1 and TIME0. */ | |
c1422e5b UD |
78 | extern double difftime (time_t __time1, time_t __time0) |
79 | __THROW __attribute__ ((__const__)); | |
28f540f4 RM |
80 | |
81 | /* Return the `time_t' representation of TP and normalize TP. */ | |
c1422e5b | 82 | extern time_t mktime (struct tm *__tp) __THROW; |
28f540f4 | 83 | |
28f540f4 RM |
84 | |
85 | /* Format TP into S according to FORMAT. | |
86 | Write no more than MAXSIZE characters and return the number | |
87 | of characters written, or 0 if it would exceed MAXSIZE. */ | |
c1422e5b | 88 | extern size_t strftime (char *__restrict __s, size_t __maxsize, |
a784e502 UD |
89 | const char *__restrict __format, |
90 | const struct tm *__restrict __tp) __THROW; | |
f8adc70c | 91 | |
05b68e14 | 92 | #ifdef __USE_XOPEN |
f8adc70c RM |
93 | /* Parse S according to FORMAT and store binary time information in TP. |
94 | The return value is a pointer to the first unparsed character in S. */ | |
a784e502 UD |
95 | extern char *strptime (const char *__restrict __s, |
96 | const char *__restrict __fmt, struct tm *__tp) | |
c1422e5b | 97 | __THROW; |
05b68e14 | 98 | #endif |
28f540f4 | 99 | |
05b68e14 | 100 | #ifdef __USE_XOPEN2K8 |
c4d6f155 RM |
101 | /* Similar to the two functions above but take the information from |
102 | the provided locale and not the global locale. */ | |
c4d6f155 | 103 | |
c4d6f155 | 104 | extern size_t strftime_l (char *__restrict __s, size_t __maxsize, |
a784e502 UD |
105 | const char *__restrict __format, |
106 | const struct tm *__restrict __tp, | |
af85385f | 107 | locale_t __loc) __THROW; |
05b68e14 | 108 | #endif |
c4d6f155 | 109 | |
05b68e14 | 110 | #ifdef __USE_GNU |
a784e502 UD |
111 | extern char *strptime_l (const char *__restrict __s, |
112 | const char *__restrict __fmt, struct tm *__tp, | |
af85385f | 113 | locale_t __loc) __THROW; |
05b68e14 | 114 | #endif |
c4d6f155 | 115 | |
28f540f4 RM |
116 | |
117 | /* Return the `struct tm' representation of *TIMER | |
118 | in Universal Coordinated Time (aka Greenwich Mean Time). */ | |
a784e502 | 119 | extern struct tm *gmtime (const time_t *__timer) __THROW; |
28f540f4 RM |
120 | |
121 | /* Return the `struct tm' representation | |
122 | of *TIMER in the local timezone. */ | |
a784e502 | 123 | extern struct tm *localtime (const time_t *__timer) __THROW; |
28f540f4 | 124 | |
80a5f8b1 | 125 | #if defined __USE_POSIX || __GLIBC_USE (ISOC2X) |
c2216480 RM |
126 | /* Return the `struct tm' representation of *TIMER in UTC, |
127 | using *TP to store the result. */ | |
a784e502 | 128 | extern struct tm *gmtime_r (const time_t *__restrict __timer, |
c1422e5b | 129 | struct tm *__restrict __tp) __THROW; |
c2216480 RM |
130 | |
131 | /* Return the `struct tm' representation of *TIMER in local time, | |
132 | using *TP to store the result. */ | |
a784e502 | 133 | extern struct tm *localtime_r (const time_t *__restrict __timer, |
c1422e5b | 134 | struct tm *__restrict __tp) __THROW; |
80a5f8b1 | 135 | #endif /* POSIX || C2X */ |
c2216480 | 136 | |
28f540f4 RM |
137 | /* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n" |
138 | that is the representation of TP in this format. */ | |
a784e502 | 139 | extern char *asctime (const struct tm *__tp) __THROW; |
28f540f4 | 140 | |
f0f1bf85 | 141 | /* Equivalent to `asctime (localtime (timer))'. */ |
a784e502 | 142 | extern char *ctime (const time_t *__timer) __THROW; |
28f540f4 | 143 | |
80a5f8b1 | 144 | #if defined __USE_POSIX || __GLIBC_USE (ISOC2X) |
23396375 UD |
145 | /* Reentrant versions of the above functions. */ |
146 | ||
147 | /* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n" | |
148 | that is the representation of TP in this format. */ | |
a784e502 | 149 | extern char *asctime_r (const struct tm *__restrict __tp, |
c1422e5b | 150 | char *__restrict __buf) __THROW; |
23396375 | 151 | |
f0f1bf85 | 152 | /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'. */ |
a784e502 | 153 | extern char *ctime_r (const time_t *__restrict __timer, |
c1422e5b | 154 | char *__restrict __buf) __THROW; |
80a5f8b1 | 155 | #endif /* POSIX || C2X */ |
23396375 | 156 | |
28f540f4 RM |
157 | |
158 | /* Defined in localtime.c. */ | |
159 | extern char *__tzname[2]; /* Current timezone names. */ | |
f0f1bf85 | 160 | extern int __daylight; /* If daylight-saving time is ever in use. */ |
28f540f4 RM |
161 | extern long int __timezone; /* Seconds west of UTC. */ |
162 | ||
28f540f4 | 163 | |
05b68e14 | 164 | #ifdef __USE_POSIX |
28f540f4 RM |
165 | /* Same as above. */ |
166 | extern char *tzname[2]; | |
167 | ||
bdbf022d UD |
168 | /* Set time conversion information from the TZ environment variable. |
169 | If TZ is not defined, a locale-dependent default is used. */ | |
c1422e5b | 170 | extern void tzset (void) __THROW; |
05b68e14 | 171 | #endif |
28f540f4 | 172 | |
05b68e14 | 173 | #if defined __USE_MISC || defined __USE_XOPEN |
28f540f4 RM |
174 | extern int daylight; |
175 | extern long int timezone; | |
05b68e14 | 176 | #endif |
28f540f4 | 177 | |
28f540f4 RM |
178 | |
179 | /* Nonzero if YEAR is a leap year (every 4 years, | |
180 | except every 100th isn't, and every 400th is). */ | |
05b68e14 | 181 | #define __isleap(year) \ |
28f540f4 RM |
182 | ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) |
183 | ||
184 | ||
05b68e14 | 185 | #ifdef __USE_MISC |
28f540f4 RM |
186 | /* Miscellaneous functions many Unices inherited from the public domain |
187 | localtime package. These are included only for compatibility. */ | |
188 | ||
189 | /* Like `mktime', but for TP represents Universal Time, not local time. */ | |
c1422e5b | 190 | extern time_t timegm (struct tm *__tp) __THROW; |
28f540f4 RM |
191 | |
192 | /* Another name for `mktime'. */ | |
c1422e5b | 193 | extern time_t timelocal (struct tm *__tp) __THROW; |
28f540f4 RM |
194 | |
195 | /* Return the number of days in YEAR. */ | |
be2623ae | 196 | extern int dysize (int __year) __THROW __attribute__ ((__const__)); |
05b68e14 | 197 | #endif |
28f540f4 RM |
198 | |
199 | ||
05b68e14 | 200 | #ifdef __USE_POSIX199309 |
2c008571 UD |
201 | /* Pause execution for a number of nanoseconds. |
202 | ||
203 | This function is a cancellation point and therefore not marked with | |
204 | __THROW. */ | |
a784e502 | 205 | extern int nanosleep (const struct timespec *__requested_time, |
2c008571 | 206 | struct timespec *__remaining); |
be1dd949 UD |
207 | |
208 | ||
209 | /* Get resolution of clock CLOCK_ID. */ | |
c1422e5b | 210 | extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW; |
be1dd949 UD |
211 | |
212 | /* Get current value of clock CLOCK_ID and store it in TP. */ | |
c1422e5b | 213 | extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW; |
be1dd949 UD |
214 | |
215 | /* Set clock CLOCK_ID to value TP. */ | |
a784e502 | 216 | extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) |
c1422e5b | 217 | __THROW; |
be1dd949 | 218 | |
05b68e14 | 219 | # ifdef __USE_XOPEN2K |
2c008571 UD |
220 | /* High-resolution sleep with the specified clock. |
221 | ||
222 | This function is a cancellation point and therefore not marked with | |
223 | __THROW. */ | |
c000cdad | 224 | extern int clock_nanosleep (clockid_t __clock_id, int __flags, |
a784e502 | 225 | const struct timespec *__req, |
2c008571 | 226 | struct timespec *__rem); |
c000cdad | 227 | |
094f72c6 | 228 | /* Return clock ID for CPU-time clock. */ |
77741499 | 229 | extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __THROW; |
05b68e14 | 230 | # endif |
094f72c6 | 231 | |
be1dd949 UD |
232 | |
233 | /* Create new per-process timer using CLOCK_ID. */ | |
98cbe360 UD |
234 | extern int timer_create (clockid_t __clock_id, |
235 | struct sigevent *__restrict __evp, | |
236 | timer_t *__restrict __timerid) __THROW; | |
be1dd949 UD |
237 | |
238 | /* Delete timer TIMERID. */ | |
c1422e5b | 239 | extern int timer_delete (timer_t __timerid) __THROW; |
be1dd949 | 240 | |
1f529f7d | 241 | /* Set timer TIMERID to VALUE, returning old value in OVALUE. */ |
c1422e5b | 242 | extern int timer_settime (timer_t __timerid, int __flags, |
a784e502 | 243 | const struct itimerspec *__restrict __value, |
98cbe360 | 244 | struct itimerspec *__restrict __ovalue) __THROW; |
be1dd949 | 245 | |
1f529f7d | 246 | /* Get current value of timer TIMERID and store it in VALUE. */ |
c1422e5b UD |
247 | extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) |
248 | __THROW; | |
be1dd949 UD |
249 | |
250 | /* Get expiration overrun for timer TIMERID. */ | |
c1422e5b | 251 | extern int timer_getoverrun (timer_t __timerid) __THROW; |
05b68e14 | 252 | #endif |
7b3547eb RM |
253 | |
254 | ||
05b68e14 | 255 | #ifdef __USE_ISOC11 |
7a270350 UD |
256 | /* Set TS to calendar time based in time base BASE. */ |
257 | extern int timespec_get (struct timespec *__ts, int __base) | |
258 | __THROW __nonnull ((1)); | |
05b68e14 | 259 | #endif |
7a270350 UD |
260 | |
261 | ||
05b68e14 | 262 | #ifdef __USE_XOPEN_EXTENDED |
f21acc89 UD |
263 | /* Set to one of the following values to indicate an error. |
264 | 1 the DATEMSK environment variable is null or undefined, | |
265 | 2 the template file cannot be opened for reading, | |
266 | 3 failed to get file status information, | |
267 | 4 the template file is not a regular file, | |
268 | 5 an error is encountered while reading the template file, | |
269 | 6 memory allication failed (not enough memory available), | |
270 | 7 there is no line in the template that matches the input, | |
271 | 8 invalid input specification Example: February 31 or a time is | |
4c1423ed | 272 | specified that can not be represented in a time_t (representing |
f21acc89 UD |
273 | the time in seconds since 00:00:00 UTC, January 1, 1970) */ |
274 | extern int getdate_err; | |
275 | ||
276 | /* Parse the given string as a date specification and return a value | |
277 | representing the value. The templates from the file identified by | |
278 | the environment variable DATEMSK are used. In case of an error | |
2c008571 UD |
279 | `getdate_err' is set. |
280 | ||
4c1423ed | 281 | This function is a possible cancellation point and therefore not |
2c008571 | 282 | marked with __THROW. */ |
a784e502 | 283 | extern struct tm *getdate (const char *__string); |
05b68e14 | 284 | #endif |
f21acc89 | 285 | |
05b68e14 | 286 | #ifdef __USE_GNU |
f21acc89 UD |
287 | /* Since `getdate' is not reentrant because of the use of `getdate_err' |
288 | and the static buffer to return the result in, we provide a thread-safe | |
289 | variant. The functionality is the same. The result is returned in | |
290 | the buffer pointed to by RESBUFP and in case of an error the return | |
2c008571 UD |
291 | value is != 0 with the same values as given above for `getdate_err'. |
292 | ||
293 | This function is not part of POSIX and therefore no official | |
294 | cancellation point. But due to similarity with an POSIX interface | |
295 | or due to the implementation it is a cancellation point and | |
296 | therefore not marked with __THROW. */ | |
a784e502 | 297 | extern int getdate_r (const char *__restrict __string, |
2c008571 | 298 | struct tm *__restrict __resbufp); |
05b68e14 | 299 | #endif |
f21acc89 | 300 | |
28f540f4 RM |
301 | __END_DECLS |
302 | ||
05b68e14 | 303 | #endif /* time.h. */ |