123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /* Copyright (C) 1991, 92, 93, 94, 96, 97, 98 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 Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
- #ifndef _SYS_TIME_H
- #define _SYS_TIME_H 1
- #include <features.h>
- /* POSIX.4 structure for a time value. This is like a `struct timeval' but
- has nanoseconds instead of microseconds. */
- struct timespec
- {
- long int tv_sec; /* Seconds. */
- long int tv_nsec; /* Nanoseconds. */
- };
- #include <time.h>
- #include <sys/select.h>
- #define __need_timeval
- #include <bits/time.h>
- __BEGIN_DECLS
- /* 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; \
- }
- /* 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. */
- };
- /* 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 __P ((struct timeval *__tv,
- struct timezone *__tz));
- /* Set the current time of day and timezone information.
- This call is restricted to the super-user. */
- extern int settimeofday __P ((__const struct timeval *__tv,
- __const struct timezone *__tz));
- /* 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 __P ((__const struct timeval *__delta,
- struct timeval *__olddelta));
- /* 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;
- };
- /* Set *VALUE to the current setting of timer WHICH.
- Return 0 on success, -1 on errors. */
- extern int getitimer __P ((enum __itimer_which __which,
- struct itimerval *__value));
- /* 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 __P ((enum __itimer_which __which,
- __const struct itimerval *__new,
- struct itimerval *__old));
- /* Change the access time of FILE to TVP[0] and
- the modification time of FILE to TVP[1]. */
- extern int utimes __P ((__const char *__file, struct timeval __tvp[2]));
- /* 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)
- __END_DECLS
- #endif /* sys/time.h */
|