xref: /freebsd/include/time.h (revision d93a896ef95946b0bf1219866fcb324b78543444)
1  /*
2   * Copyright (c) 1989, 1993
3   *	The Regents of the University of California.  All rights reserved.
4   * (c) UNIX System Laboratories, Inc.
5   * All or some portions of this file are derived from material licensed
6   * to the University of California by American Telephone and Telegraph
7   * Co. or Unix System Laboratories, Inc. and are reproduced herein with
8   * the permission of UNIX System Laboratories, Inc.
9   *
10   * Redistribution and use in source and binary forms, with or without
11   * modification, are permitted provided that the following conditions
12   * are met:
13   * 1. Redistributions of source code must retain the above copyright
14   *    notice, this list of conditions and the following disclaimer.
15   * 2. Redistributions in binary form must reproduce the above copyright
16   *    notice, this list of conditions and the following disclaimer in the
17   *    documentation and/or other materials provided with the distribution.
18   * 3. Neither the name of the University nor the names of its contributors
19   *    may be used to endorse or promote products derived from this software
20   *    without specific prior written permission.
21   *
22   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32   * SUCH DAMAGE.
33   *
34   *	@(#)time.h	8.3 (Berkeley) 1/21/94
35   */
36  
37  /*
38   * $FreeBSD$
39   */
40  
41  #ifndef _TIME_H_
42  #define	_TIME_H_
43  
44  #include <sys/cdefs.h>
45  #include <sys/_null.h>
46  #include <sys/_types.h>
47  
48  #if __POSIX_VISIBLE > 0 && __POSIX_VISIBLE < 200112 || __BSD_VISIBLE
49  /*
50   * Frequency of the clock ticks reported by times().  Deprecated - use
51   * sysconf(_SC_CLK_TCK) instead.  (Removed in 1003.1-2001.)
52   */
53  #define	CLK_TCK		128
54  #endif
55  
56  /* Frequency of the clock ticks reported by clock().  */
57  #define	CLOCKS_PER_SEC	128
58  
59  #ifndef _CLOCK_T_DECLARED
60  typedef	__clock_t	clock_t;
61  #define	_CLOCK_T_DECLARED
62  #endif
63  
64  #ifndef _TIME_T_DECLARED
65  typedef	__time_t	time_t;
66  #define	_TIME_T_DECLARED
67  #endif
68  
69  #ifndef _SIZE_T_DECLARED
70  typedef	__size_t	size_t;
71  #define	_SIZE_T_DECLARED
72  #endif
73  
74  #if __POSIX_VISIBLE >= 199309
75  /*
76   * New in POSIX 1003.1b-1993.
77   */
78  #ifndef _CLOCKID_T_DECLARED
79  typedef	__clockid_t	clockid_t;
80  #define	_CLOCKID_T_DECLARED
81  #endif
82  
83  #ifndef _TIMER_T_DECLARED
84  typedef	__timer_t	timer_t;
85  #define	_TIMER_T_DECLARED
86  #endif
87  
88  #include <sys/timespec.h>
89  #endif /* __POSIX_VISIBLE >= 199309 */
90  
91  #if __POSIX_VISIBLE >= 200112
92  #ifndef _PID_T_DECLARED
93  typedef	__pid_t		pid_t;
94  #define	_PID_T_DECLARED
95  #endif
96  #endif
97  
98  /* These macros are also in sys/time.h. */
99  #if !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 200112
100  #define CLOCK_REALTIME	0
101  #ifdef __BSD_VISIBLE
102  #define CLOCK_VIRTUAL	1
103  #define CLOCK_PROF	2
104  #endif
105  #define CLOCK_MONOTONIC	4
106  #define CLOCK_UPTIME	5		/* FreeBSD-specific. */
107  #define CLOCK_UPTIME_PRECISE	7	/* FreeBSD-specific. */
108  #define CLOCK_UPTIME_FAST	8	/* FreeBSD-specific. */
109  #define CLOCK_REALTIME_PRECISE	9	/* FreeBSD-specific. */
110  #define CLOCK_REALTIME_FAST	10	/* FreeBSD-specific. */
111  #define CLOCK_MONOTONIC_PRECISE	11	/* FreeBSD-specific. */
112  #define CLOCK_MONOTONIC_FAST	12	/* FreeBSD-specific. */
113  #define CLOCK_SECOND	13		/* FreeBSD-specific. */
114  #define CLOCK_THREAD_CPUTIME_ID	14
115  #define	CLOCK_PROCESS_CPUTIME_ID	15
116  #endif /* !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 200112 */
117  
118  #if !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 200112
119  #if __BSD_VISIBLE
120  #define TIMER_RELTIME	0x0	/* relative timer */
121  #endif
122  #define TIMER_ABSTIME	0x1	/* absolute timer */
123  #endif /* !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 200112 */
124  
125  struct tm {
126  	int	tm_sec;		/* seconds after the minute [0-60] */
127  	int	tm_min;		/* minutes after the hour [0-59] */
128  	int	tm_hour;	/* hours since midnight [0-23] */
129  	int	tm_mday;	/* day of the month [1-31] */
130  	int	tm_mon;		/* months since January [0-11] */
131  	int	tm_year;	/* years since 1900 */
132  	int	tm_wday;	/* days since Sunday [0-6] */
133  	int	tm_yday;	/* days since January 1 [0-365] */
134  	int	tm_isdst;	/* Daylight Savings Time flag */
135  	long	tm_gmtoff;	/* offset from UTC in seconds */
136  	char	*tm_zone;	/* timezone abbreviation */
137  };
138  
139  #if __POSIX_VISIBLE
140  extern char *tzname[];
141  #endif
142  
143  __BEGIN_DECLS
144  char *asctime(const struct tm *);
145  clock_t clock(void);
146  char *ctime(const time_t *);
147  double difftime(time_t, time_t);
148  /* XXX missing: getdate() */
149  struct tm *gmtime(const time_t *);
150  struct tm *localtime(const time_t *);
151  time_t mktime(struct tm *);
152  size_t strftime(char * __restrict, size_t, const char * __restrict,
153      const struct tm * __restrict);
154  time_t time(time_t *);
155  #if __POSIX_VISIBLE >= 200112
156  struct sigevent;
157  int timer_create(clockid_t, struct sigevent *__restrict, timer_t *__restrict);
158  int timer_delete(timer_t);
159  int timer_gettime(timer_t, struct itimerspec *);
160  int timer_getoverrun(timer_t);
161  int timer_settime(timer_t, int, const struct itimerspec *__restrict,
162  	struct itimerspec *__restrict);
163  #endif
164  #if __POSIX_VISIBLE
165  void tzset(void);
166  #endif
167  
168  #if __POSIX_VISIBLE >= 199309
169  int clock_getres(clockid_t, struct timespec *);
170  int clock_gettime(clockid_t, struct timespec *);
171  int clock_settime(clockid_t, const struct timespec *);
172  int nanosleep(const struct timespec *, struct timespec *);
173  #endif /* __POSIX_VISIBLE >= 199309 */
174  
175  #if __POSIX_VISIBLE >= 200112
176  int clock_getcpuclockid(pid_t, clockid_t *);
177  int clock_nanosleep(clockid_t, int, const struct timespec *, struct timespec *);
178  #endif
179  
180  #if __POSIX_VISIBLE >= 199506
181  char *asctime_r(const struct tm *, char *);
182  char *ctime_r(const time_t *, char *);
183  struct tm *gmtime_r(const time_t *, struct tm *);
184  struct tm *localtime_r(const time_t *, struct tm *);
185  #endif
186  
187  #if __XSI_VISIBLE
188  char *strptime(const char * __restrict, const char * __restrict,
189      struct tm * __restrict);
190  #endif
191  
192  #if __BSD_VISIBLE
193  char *timezone(int, int);	/* XXX XSI conflict */
194  void tzsetwall(void);
195  time_t timelocal(struct tm * const);
196  time_t timegm(struct tm * const);
197  int timer_oshandle_np(timer_t timerid);
198  #endif /* __BSD_VISIBLE */
199  
200  #if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
201  #include <xlocale/_time.h>
202  #endif
203  __END_DECLS
204  
205  #endif /* !_TIME_H_ */
206