]> git.ipfire.org Git - thirdparty/glibc.git/blame - time/time.h
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / time / time.h
CommitLineData
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 49struct sigevent;
05b68e14 50#endif
252ff6b6 51
05b68e14
ZW
52#ifdef __USE_XOPEN2K
53# ifndef __pid_t_defined
094f72c6 54typedef __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 72extern clock_t clock (void) __THROW;
28f540f4
RM
73
74/* Return the current time and put it in *TIMER if TIMER is not NULL. */
c1422e5b 75extern time_t time (time_t *__timer) __THROW;
28f540f4
RM
76
77/* Return the difference between TIME1 and TIME0. */
c1422e5b
UD
78extern 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 82extern 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 88extern 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
95extern 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 104extern 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
111extern 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 119extern 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 123extern 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 128extern 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 133extern 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 139extern char *asctime (const struct tm *__tp) __THROW;
28f540f4 140
f0f1bf85 141/* Equivalent to `asctime (localtime (timer))'. */
a784e502 142extern 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 149extern 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 153extern 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. */
159extern char *__tzname[2]; /* Current timezone names. */
f0f1bf85 160extern int __daylight; /* If daylight-saving time is ever in use. */
28f540f4
RM
161extern long int __timezone; /* Seconds west of UTC. */
162
28f540f4 163
05b68e14 164#ifdef __USE_POSIX
28f540f4
RM
165/* Same as above. */
166extern 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 170extern void tzset (void) __THROW;
05b68e14 171#endif
28f540f4 172
05b68e14 173#if defined __USE_MISC || defined __USE_XOPEN
28f540f4
RM
174extern int daylight;
175extern 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 190extern time_t timegm (struct tm *__tp) __THROW;
28f540f4
RM
191
192/* Another name for `mktime'. */
c1422e5b 193extern time_t timelocal (struct tm *__tp) __THROW;
28f540f4
RM
194
195/* Return the number of days in YEAR. */
be2623ae 196extern 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 205extern int nanosleep (const struct timespec *__requested_time,
2c008571 206 struct timespec *__remaining);
be1dd949
UD
207
208
209/* Get resolution of clock CLOCK_ID. */
c1422e5b 210extern 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 213extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
be1dd949
UD
214
215/* Set clock CLOCK_ID to value TP. */
a784e502 216extern 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 224extern 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 229extern 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
234extern 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 239extern int timer_delete (timer_t __timerid) __THROW;
be1dd949 240
1f529f7d 241/* Set timer TIMERID to VALUE, returning old value in OVALUE. */
c1422e5b 242extern 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
247extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
248 __THROW;
be1dd949
UD
249
250/* Get expiration overrun for timer TIMERID. */
c1422e5b 251extern 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. */
257extern 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) */
274extern 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 283extern 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 297extern 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. */