]> git.ipfire.org Git - thirdparty/glibc.git/blame - time/time.h
Fix trailing space.
[thirdparty/glibc.git] / time / time.h
CommitLineData
b168057a 1/* Copyright (C) 1991-2015 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
PE
15 License along with the GNU C Library; if not, see
16 <http://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
23
a5a0310d
UD
24#if (! defined __need_time_t && !defined __need_clock_t && \
25 ! defined __need_timespec)
26# define _TIME_H 1
27# include <features.h>
28f540f4
RM
28
29__BEGIN_DECLS
30
31#endif
32
33#ifdef _TIME_H
34/* Get size_t and NULL from <stddef.h>. */
a5a0310d
UD
35# define __need_size_t
36# define __need_NULL
37# include <stddef.h>
28f540f4 38
f8cac037
RM
39/* This defines CLOCKS_PER_SEC, which is the number of processor clock
40 ticks per second. */
a5a0310d 41# include <bits/time.h>
f8cac037
RM
42
43/* This is the obsolete POSIX.1-1988 name for the same constant. */
fdec54a7 44# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
a5a0310d
UD
45# ifndef CLK_TCK
46# define CLK_TCK CLOCKS_PER_SEC
47# endif
48# endif
28f540f4
RM
49
50#endif /* <time.h> included. */
51
c131718c 52#if !defined __clock_t_defined && (defined _TIME_H || defined __need_clock_t)
a5a0310d 53# define __clock_t_defined 1
28f540f4 54
a5a0310d 55# include <bits/types.h>
9004bc20 56
7a5affeb 57__BEGIN_NAMESPACE_STD
28f540f4 58/* Returned by `clock'. */
9004bc20 59typedef __clock_t clock_t;
7a5affeb 60__END_NAMESPACE_STD
acd7f096 61#if defined __USE_XOPEN || defined __USE_POSIX
7a5affeb
UD
62__USING_NAMESPACE_STD(clock_t)
63#endif
28f540f4
RM
64
65#endif /* clock_t not defined and <time.h> or need clock_t. */
66#undef __need_clock_t
67
c131718c 68#if !defined __time_t_defined && (defined _TIME_H || defined __need_time_t)
a5a0310d 69# define __time_t_defined 1
28f540f4 70
a5a0310d 71# include <bits/types.h>
28f540f4 72
7a5affeb 73__BEGIN_NAMESPACE_STD
28f540f4
RM
74/* Returned by `time'. */
75typedef __time_t time_t;
7a5affeb 76__END_NAMESPACE_STD
acd7f096 77#ifdef __USE_POSIX
7a5affeb
UD
78__USING_NAMESPACE_STD(time_t)
79#endif
28f540f4
RM
80
81#endif /* time_t not defined and <time.h> or need time_t. */
82#undef __need_time_t
83
6340ea91
UD
84#if !defined __clockid_t_defined && \
85 ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_clockid_t)
91bc38d0
UD
86# define __clockid_t_defined 1
87
88# include <bits/types.h>
89
90/* Clock ID used in clock and timer functions. */
91typedef __clockid_t clockid_t;
92
93#endif /* clockid_t not defined and <time.h> or need clockid_t. */
94#undef __clockid_time_t
95
6340ea91
UD
96#if !defined __timer_t_defined && \
97 ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_timer_t)
91bc38d0
UD
98# define __timer_t_defined 1
99
100# include <bits/types.h>
101
102/* Timer ID returned by `timer_create'. */
103typedef __timer_t timer_t;
104
105#endif /* timer_t not defined and <time.h> or need timer_t. */
106#undef __need_timer_t
107
28f540f4 108
74033a25
UD
109#if (!defined __timespec_defined \
110 && ((defined _TIME_H \
acd7f096 111 && (defined __USE_POSIX199309 \
74033a25
UD
112 || defined __USE_ISOC11)) \
113 || defined __need_timespec))
a5a0310d 114# define __timespec_defined 1
dbe31b9a 115
fe8fc512
RM
116# include <bits/types.h> /* This defines __time_t for us. */
117
be1dd949 118/* POSIX.1b structure for a time value. This is like a `struct timeval' but
dbe31b9a
RM
119 has nanoseconds instead of microseconds. */
120struct timespec
121 {
68984987 122 __time_t tv_sec; /* Seconds. */
a46f2169 123 __syscall_slong_t tv_nsec; /* Nanoseconds. */
dbe31b9a
RM
124 };
125
126#endif /* timespec not defined and <time.h> or need timespec. */
127#undef __need_timespec
128
129
28f540f4 130#ifdef _TIME_H
7a5affeb 131__BEGIN_NAMESPACE_STD
28f540f4
RM
132/* Used by other time functions. */
133struct tm
134{
f0f1bf85 135 int tm_sec; /* Seconds. [0-60] (1 leap second) */
28f540f4
RM
136 int tm_min; /* Minutes. [0-59] */
137 int tm_hour; /* Hours. [0-23] */
138 int tm_mday; /* Day. [1-31] */
139 int tm_mon; /* Month. [0-11] */
140 int tm_year; /* Year - 1900. */
141 int tm_wday; /* Day of week. [0-6] */
142 int tm_yday; /* Days in year.[0-365] */
143 int tm_isdst; /* DST. [-1/0/1]*/
f0f1bf85 144
498afc54 145# ifdef __USE_MISC
f0f1bf85 146 long int tm_gmtoff; /* Seconds east of UTC. */
a784e502 147 const char *tm_zone; /* Timezone abbreviation. */
74033a25 148# else
f0f1bf85 149 long int __tm_gmtoff; /* Seconds east of UTC. */
a784e502 150 const char *__tm_zone; /* Timezone abbreviation. */
74033a25 151# endif
28f540f4 152};
7a5affeb 153__END_NAMESPACE_STD
acd7f096 154#if defined __USE_XOPEN || defined __USE_POSIX
7a5affeb
UD
155__USING_NAMESPACE_STD(tm)
156#endif
28f540f4 157
28f540f4 158
74033a25 159# ifdef __USE_POSIX199309
be1dd949
UD
160/* POSIX.1b structure for timer start values and intervals. */
161struct itimerspec
162 {
163 struct timespec it_interval;
164 struct timespec it_value;
165 };
252ff6b6
UD
166
167/* We can use a simple forward declaration. */
168struct sigevent;
169
74033a25 170# endif /* POSIX.1b */
be1dd949 171
74033a25
UD
172# ifdef __USE_XOPEN2K
173# ifndef __pid_t_defined
094f72c6 174typedef __pid_t pid_t;
74033a25
UD
175# define __pid_t_defined
176# endif
177# endif
178
179
180# ifdef __USE_ISOC11
181/* Time base values for timespec_get. */
7a270350 182# define TIME_UTC 1
094f72c6 183# endif
094f72c6 184
be1dd949 185
7a5affeb 186__BEGIN_NAMESPACE_STD
28f540f4
RM
187/* Time used by the program so far (user time + system time).
188 The result / CLOCKS_PER_SECOND is program time in seconds. */
c1422e5b 189extern clock_t clock (void) __THROW;
28f540f4
RM
190
191/* Return the current time and put it in *TIMER if TIMER is not NULL. */
c1422e5b 192extern time_t time (time_t *__timer) __THROW;
28f540f4
RM
193
194/* Return the difference between TIME1 and TIME0. */
c1422e5b
UD
195extern double difftime (time_t __time1, time_t __time0)
196 __THROW __attribute__ ((__const__));
28f540f4
RM
197
198/* Return the `time_t' representation of TP and normalize TP. */
c1422e5b 199extern time_t mktime (struct tm *__tp) __THROW;
28f540f4 200
28f540f4
RM
201
202/* Format TP into S according to FORMAT.
203 Write no more than MAXSIZE characters and return the number
204 of characters written, or 0 if it would exceed MAXSIZE. */
c1422e5b 205extern size_t strftime (char *__restrict __s, size_t __maxsize,
a784e502
UD
206 const char *__restrict __format,
207 const struct tm *__restrict __tp) __THROW;
7a5affeb 208__END_NAMESPACE_STD
f8adc70c 209
a5a0310d 210# ifdef __USE_XOPEN
f8adc70c
RM
211/* Parse S according to FORMAT and store binary time information in TP.
212 The return value is a pointer to the first unparsed character in S. */
a784e502
UD
213extern char *strptime (const char *__restrict __s,
214 const char *__restrict __fmt, struct tm *__tp)
c1422e5b 215 __THROW;
a5a0310d 216# endif
28f540f4 217
6cbe890a 218# ifdef __USE_XOPEN2K8
c4d6f155
RM
219/* Similar to the two functions above but take the information from
220 the provided locale and not the global locale. */
221# include <xlocale.h>
222
c4d6f155 223extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
a784e502
UD
224 const char *__restrict __format,
225 const struct tm *__restrict __tp,
c4d6f155 226 __locale_t __loc) __THROW;
6cbe890a 227# endif
c4d6f155 228
6cbe890a 229# ifdef __USE_GNU
a784e502
UD
230extern char *strptime_l (const char *__restrict __s,
231 const char *__restrict __fmt, struct tm *__tp,
c4d6f155
RM
232 __locale_t __loc) __THROW;
233# endif
234
28f540f4 235
7a5affeb 236__BEGIN_NAMESPACE_STD
28f540f4
RM
237/* Return the `struct tm' representation of *TIMER
238 in Universal Coordinated Time (aka Greenwich Mean Time). */
a784e502 239extern struct tm *gmtime (const time_t *__timer) __THROW;
28f540f4
RM
240
241/* Return the `struct tm' representation
242 of *TIMER in the local timezone. */
a784e502 243extern struct tm *localtime (const time_t *__timer) __THROW;
7a5affeb 244__END_NAMESPACE_STD
28f540f4 245
acd7f096 246# ifdef __USE_POSIX
c2216480
RM
247/* Return the `struct tm' representation of *TIMER in UTC,
248 using *TP to store the result. */
a784e502 249extern struct tm *gmtime_r (const time_t *__restrict __timer,
c1422e5b 250 struct tm *__restrict __tp) __THROW;
c2216480
RM
251
252/* Return the `struct tm' representation of *TIMER in local time,
253 using *TP to store the result. */
a784e502 254extern struct tm *localtime_r (const time_t *__restrict __timer,
c1422e5b 255 struct tm *__restrict __tp) __THROW;
acd7f096 256# endif /* POSIX */
c2216480 257
7a5affeb 258__BEGIN_NAMESPACE_STD
28f540f4
RM
259/* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n"
260 that is the representation of TP in this format. */
a784e502 261extern char *asctime (const struct tm *__tp) __THROW;
28f540f4 262
f0f1bf85 263/* Equivalent to `asctime (localtime (timer))'. */
a784e502 264extern char *ctime (const time_t *__timer) __THROW;
7a5affeb 265__END_NAMESPACE_STD
28f540f4 266
acd7f096 267# ifdef __USE_POSIX
23396375
UD
268/* Reentrant versions of the above functions. */
269
270/* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n"
271 that is the representation of TP in this format. */
a784e502 272extern char *asctime_r (const struct tm *__restrict __tp,
c1422e5b 273 char *__restrict __buf) __THROW;
23396375 274
f0f1bf85 275/* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'. */
a784e502 276extern char *ctime_r (const time_t *__restrict __timer,
c1422e5b 277 char *__restrict __buf) __THROW;
acd7f096 278# endif /* POSIX */
23396375 279
28f540f4
RM
280
281/* Defined in localtime.c. */
282extern char *__tzname[2]; /* Current timezone names. */
f0f1bf85 283extern int __daylight; /* If daylight-saving time is ever in use. */
28f540f4
RM
284extern long int __timezone; /* Seconds west of UTC. */
285
28f540f4 286
a5a0310d 287# ifdef __USE_POSIX
28f540f4
RM
288/* Same as above. */
289extern char *tzname[2];
290
bdbf022d
UD
291/* Set time conversion information from the TZ environment variable.
292 If TZ is not defined, a locale-dependent default is used. */
c1422e5b 293extern void tzset (void) __THROW;
a5a0310d 294# endif
28f540f4 295
498afc54 296# if defined __USE_MISC || defined __USE_XOPEN
28f540f4
RM
297extern int daylight;
298extern long int timezone;
a5a0310d 299# endif
28f540f4 300
498afc54 301# ifdef __USE_MISC
28f540f4
RM
302/* Set the system time to *WHEN.
303 This call is restricted to the superuser. */
a784e502 304extern int stime (const time_t *__when) __THROW;
a5a0310d 305# endif
28f540f4
RM
306
307
308/* Nonzero if YEAR is a leap year (every 4 years,
309 except every 100th isn't, and every 400th is). */
a5a0310d 310# define __isleap(year) \
28f540f4
RM
311 ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
312
313
a5a0310d 314# ifdef __USE_MISC
28f540f4
RM
315/* Miscellaneous functions many Unices inherited from the public domain
316 localtime package. These are included only for compatibility. */
317
318/* Like `mktime', but for TP represents Universal Time, not local time. */
c1422e5b 319extern time_t timegm (struct tm *__tp) __THROW;
28f540f4
RM
320
321/* Another name for `mktime'. */
c1422e5b 322extern time_t timelocal (struct tm *__tp) __THROW;
28f540f4
RM
323
324/* Return the number of days in YEAR. */
be2623ae 325extern int dysize (int __year) __THROW __attribute__ ((__const__));
a5a0310d 326# endif
28f540f4
RM
327
328
a5a0310d 329# ifdef __USE_POSIX199309
2c008571
UD
330/* Pause execution for a number of nanoseconds.
331
332 This function is a cancellation point and therefore not marked with
333 __THROW. */
a784e502 334extern int nanosleep (const struct timespec *__requested_time,
2c008571 335 struct timespec *__remaining);
be1dd949
UD
336
337
338/* Get resolution of clock CLOCK_ID. */
c1422e5b 339extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW;
be1dd949
UD
340
341/* Get current value of clock CLOCK_ID and store it in TP. */
c1422e5b 342extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
be1dd949
UD
343
344/* Set clock CLOCK_ID to value TP. */
a784e502 345extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
c1422e5b 346 __THROW;
be1dd949 347
094f72c6 348# ifdef __USE_XOPEN2K
2c008571
UD
349/* High-resolution sleep with the specified clock.
350
351 This function is a cancellation point and therefore not marked with
352 __THROW. */
c000cdad 353extern int clock_nanosleep (clockid_t __clock_id, int __flags,
a784e502 354 const struct timespec *__req,
2c008571 355 struct timespec *__rem);
c000cdad 356
094f72c6 357/* Return clock ID for CPU-time clock. */
77741499 358extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __THROW;
094f72c6
UD
359# endif
360
be1dd949
UD
361
362/* Create new per-process timer using CLOCK_ID. */
98cbe360
UD
363extern int timer_create (clockid_t __clock_id,
364 struct sigevent *__restrict __evp,
365 timer_t *__restrict __timerid) __THROW;
be1dd949
UD
366
367/* Delete timer TIMERID. */
c1422e5b 368extern int timer_delete (timer_t __timerid) __THROW;
be1dd949 369
1f529f7d 370/* Set timer TIMERID to VALUE, returning old value in OVALUE. */
c1422e5b 371extern int timer_settime (timer_t __timerid, int __flags,
a784e502 372 const struct itimerspec *__restrict __value,
98cbe360 373 struct itimerspec *__restrict __ovalue) __THROW;
be1dd949 374
1f529f7d 375/* Get current value of timer TIMERID and store it in VALUE. */
c1422e5b
UD
376extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
377 __THROW;
be1dd949
UD
378
379/* Get expiration overrun for timer TIMERID. */
c1422e5b 380extern int timer_getoverrun (timer_t __timerid) __THROW;
a5a0310d 381# endif
7b3547eb
RM
382
383
7a270350
UD
384# ifdef __USE_ISOC11
385/* Set TS to calendar time based in time base BASE. */
386extern int timespec_get (struct timespec *__ts, int __base)
387 __THROW __nonnull ((1));
388# endif
389
390
a5a0310d 391# ifdef __USE_XOPEN_EXTENDED
f21acc89
UD
392/* Set to one of the following values to indicate an error.
393 1 the DATEMSK environment variable is null or undefined,
394 2 the template file cannot be opened for reading,
395 3 failed to get file status information,
396 4 the template file is not a regular file,
397 5 an error is encountered while reading the template file,
398 6 memory allication failed (not enough memory available),
399 7 there is no line in the template that matches the input,
400 8 invalid input specification Example: February 31 or a time is
4c1423ed 401 specified that can not be represented in a time_t (representing
f21acc89
UD
402 the time in seconds since 00:00:00 UTC, January 1, 1970) */
403extern int getdate_err;
404
405/* Parse the given string as a date specification and return a value
406 representing the value. The templates from the file identified by
407 the environment variable DATEMSK are used. In case of an error
2c008571
UD
408 `getdate_err' is set.
409
4c1423ed 410 This function is a possible cancellation point and therefore not
2c008571 411 marked with __THROW. */
a784e502 412extern struct tm *getdate (const char *__string);
a5a0310d 413# endif
f21acc89 414
a5a0310d 415# ifdef __USE_GNU
f21acc89
UD
416/* Since `getdate' is not reentrant because of the use of `getdate_err'
417 and the static buffer to return the result in, we provide a thread-safe
418 variant. The functionality is the same. The result is returned in
419 the buffer pointed to by RESBUFP and in case of an error the return
2c008571
UD
420 value is != 0 with the same values as given above for `getdate_err'.
421
422 This function is not part of POSIX and therefore no official
423 cancellation point. But due to similarity with an POSIX interface
424 or due to the implementation it is a cancellation point and
425 therefore not marked with __THROW. */
a784e502 426extern int getdate_r (const char *__restrict __string,
2c008571 427 struct tm *__restrict __resbufp);
a5a0310d 428# endif
f21acc89 429
28f540f4
RM
430__END_DECLS
431
432#endif /* <time.h> included. */
433
434#endif /* <time.h> not already included. */