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