123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /* Copyright (C) 1991-1994,1996-2003,2005,2006,2009
- Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
- #ifndef _SYS_TIME_H
- #define _SYS_TIME_H 1
- #include <features.h>
- #include <bits/types.h>
- #define __need_time_t
- #include <time.h>
- #define __need_timeval
- #include <bits/time.h>
- #include <sys/select.h>
- #ifndef __suseconds_t_defined
- typedef __suseconds_t suseconds_t;
- # define __suseconds_t_defined
- #endif
- __BEGIN_DECLS
- #ifdef __USE_GNU
- /* Macros for converting between `struct timeval' and `struct timespec'. */
- # define TIMEVAL_TO_TIMESPEC(tv, ts) { \
- (ts)->tv_sec = (tv)->tv_sec; \
- (ts)->tv_nsec = (tv)->tv_usec * 1000; \
- }
- # define TIMESPEC_TO_TIMEVAL(tv, ts) { \
- (tv)->tv_sec = (ts)->tv_sec; \
- (tv)->tv_usec = (ts)->tv_nsec / 1000; \
- }
- #endif
- #ifdef __USE_BSD
- /* Structure crudely representing a timezone.
- This is obsolete and should never be used. */
- struct timezone
- {
- int tz_minuteswest; /* Minutes west of GMT. */
- int tz_dsttime; /* Nonzero if DST is ever in effect. */
- };
- typedef struct timezone *__restrict __timezone_ptr_t;
- #else
- typedef void *__restrict __timezone_ptr_t;
- #endif
- /* Get the current time of day and timezone information,
- putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled.
- Returns 0 on success, -1 on errors.
- NOTE: This form of timezone information is obsolete.
- Use the functions and variables declared in <time.h> instead. */
- extern int gettimeofday (struct timeval *__restrict __tv,
- __timezone_ptr_t __tz) __THROW __nonnull ((1));
- libc_hidden_proto(gettimeofday)
- #ifdef __USE_BSD
- /* Set the current time of day and timezone information.
- This call is restricted to the super-user. */
- extern int settimeofday (const struct timeval *__tv,
- const struct timezone *__tz)
- __THROW;
- libc_hidden_proto(settimeofday)
- /* Adjust the current time of day by the amount in DELTA.
- If OLDDELTA is not NULL, it is filled in with the amount
- of time adjustment remaining to be done from the last `adjtime' call.
- This call is restricted to the super-user. */
- extern int adjtime (const struct timeval *__delta,
- struct timeval *__olddelta) __THROW;
- #endif
- /* Values for the first argument to `getitimer' and `setitimer'. */
- enum __itimer_which
- {
- /* Timers run in real time. */
- ITIMER_REAL = 0,
- #define ITIMER_REAL ITIMER_REAL
- /* Timers run only when the process is executing. */
- ITIMER_VIRTUAL = 1,
- #define ITIMER_VIRTUAL ITIMER_VIRTUAL
- /* Timers run when the process is executing and when
- the system is executing on behalf of the process. */
- ITIMER_PROF = 2
- #define ITIMER_PROF ITIMER_PROF
- };
- /* Type of the second argument to `getitimer' and
- the second and third arguments `setitimer'. */
- struct itimerval
- {
- /* Value to put into `it_value' when the timer expires. */
- struct timeval it_interval;
- /* Time to the next timer expiration. */
- struct timeval it_value;
- };
- #if defined __USE_GNU && !defined __cplusplus
- /* Use the nicer parameter type only in GNU mode and not for C++ since the
- strict C++ rules prevent the automatic promotion. */
- typedef enum __itimer_which __itimer_which_t;
- #else
- typedef int __itimer_which_t;
- #endif
- /* Set *VALUE to the current setting of timer WHICH.
- Return 0 on success, -1 on errors. */
- extern int getitimer (__itimer_which_t __which,
- struct itimerval *__value) __THROW;
- /* Set the timer WHICH to *NEW. If OLD is not NULL,
- set *OLD to the old value of timer WHICH.
- Returns 0 on success, -1 on errors. */
- extern int setitimer (__itimer_which_t __which,
- const struct itimerval *__restrict __new,
- struct itimerval *__restrict __old) __THROW;
- libc_hidden_proto(setitimer)
- /* Change the access time of FILE to TVP[0] and the modification time of
- FILE to TVP[1]. If TVP is a null pointer, use the current time instead.
- Returns 0 on success, -1 on errors. */
- extern int utimes (const char *__file, const struct timeval __tvp[2])
- __THROW __nonnull ((1));
- libc_hidden_proto(utimes)
- #ifdef __USE_BSD
- /* Same as `utimes', but does not follow symbolic links. */
- extern int lutimes (const char *__file, const struct timeval __tvp[2])
- __THROW __nonnull ((1));
- #if 0
- /* Same as `utimes', but takes an open file descriptor instead of a name. */
- extern int futimes (int __fd, const struct timeval __tvp[2]) __THROW;
- #endif
- #endif
- #ifdef __USE_GNU
- /* Change the access time of FILE relative to FD to TVP[0] and the
- modification time of FILE to TVP[1]. If TVP is a null pointer, use
- the current time instead. Returns 0 on success, -1 on errors. */
- extern int futimesat (int __fd, const char *__file,
- const struct timeval __tvp[2]) __THROW;
- #endif
- #ifdef __USE_BSD
- /* Convenience macros for operations on timevals.
- NOTE: `timercmp' does not work for >= or <=. */
- # define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
- # define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
- # define timercmp(a, b, CMP) \
- (((a)->tv_sec == (b)->tv_sec) ? \
- ((a)->tv_usec CMP (b)->tv_usec) : \
- ((a)->tv_sec CMP (b)->tv_sec))
- # define timeradd(a, b, result) \
- do { \
- (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
- (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
- if ((result)->tv_usec >= 1000000) \
- { \
- ++(result)->tv_sec; \
- (result)->tv_usec -= 1000000; \
- } \
- } while (0)
- # define timersub(a, b, result) \
- do { \
- (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
- (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
- if ((result)->tv_usec < 0) { \
- --(result)->tv_sec; \
- (result)->tv_usec += 1000000; \
- } \
- } while (0)
- #endif /* BSD */
- __END_DECLS
- #endif /* sys/time.h */
|