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