Differences between current version and predecessor to the previous major change of gettimeofday(2).
Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 2 | Last edited on Tuesday, December 31, 2002 2:24:05 am | by PerryLorier | |
Older page: | version 1 | Last edited on Tuesday, June 4, 2002 12:23:42 am | by perry | Revert |
@@ -1,149 +1,69 @@
-GETTIMEOFDAY
-!!!GETTIMEOFDAY
-NAME
-SYNOPSIS
-DESCRIPTION
-RETURN VALUE
-ERRORS
-NOTE
-CONFORMING TO
-SEE ALSO
-----
!!NAME
-
-
-
gettimeofday, settimeofday
- get / set
time
+gettimeofday - get time
!!SYNOPSIS
-
-
-
__#include __
-
-
-__int gettimeofday(struct timeval *
__''tv''__, struct
-timezone *
__''tz''__);
-
int settimeofday
(const
struct timeval *__''tv'' __,
-const
struct timezone *__''tz''__);__
+
__#include <sys/time.h>
__
+ __#include <time.h>
__
+ __int gettimeofday
(struct timeval *__''tv''__, struct timezone *__''tz''__);__
!!DESCRIPTION
+__gettimeofday__ can get the time as well as a timezone. ''tv'' is a __timeval__ struct, as specified in /usr/include/sys/time.h:
+ struct timeval {
+ long tv_sec; /* seconds */
+ long tv_usec; /* microseconds */
+ };
-__gettimeofday__ and __settimeofday__ can get and set
-the time as well as a timezone. ''tv'' is a
-__timeval__ struct, as specified in
-/usr/include/sys/time.h:
-
-
-struct timeval {
-long tv_sec; /* seconds */
-long tv_usec; /* microseconds */
-};
-
The ''tv_sec'' member of the struct is the number of seconds since the Epoch (see time(2)), and ''tv_usec'' is the amount of microseconds past the current ''tv_sec'' value.
-
+The ''tv_sec'' member of the struct is the number of seconds since the Epoch (see time(2)), and ''tv_usec'' is the amount of
microseconds past the current ''tv_sec'' value.
The ''tz'' argument is a __timezone__ :
-
-
struct timezone {
-int tz_minuteswest; /* minutes W of Greenwich */
-int tz_dsttime; /* type of dst correction */
-};
+
struct timezone {
+
int tz_minuteswest; /* minutes W of Greenwich */
+
int tz_dsttime; /* type of dst correction */
+ };
The use of the timezone struct is obsolete; the ''tz_dsttime'' field has never been used under Linux - it has not been and will not be supported by libc or glibc. Each and every occurrence of this field in the kernel source (other than the declaration) is a bug. Thus, the following is purely of historic interest.
+The field ''tz_dsttime'' contains a symbolic constant (values are given below) that indicates in which part of the year Daylight Saving Time is in force. (Note: its value is constant throughout the year - it does not indicate that DST is in force, it just selects an algorithm.) The daylight saving time algorithms defined are as follows :
-The field ''tz
_dsttime'' contains a symbolic constant
-(values are given below) that indicates in which part of the
-year Daylight Saving Time is in force. (Note: its value is
-constant throughout the year - it does not indicate that
DST
-is in force, it just selects an algorithm.) The daylight
-saving time algorithms defined are as follows :
+
__DST_NONE__ /* not on dst */
+ __DST_USA__ /* USA style dst */
+ __DST_AUST__ /* Australian style dst */
+ __
DST_WET__ /* Western European dst */
+ __DST_MET__ /* Middle European dst */
+ __DST_EET__ /* Eastern European dst */
+ __DST_CAN__ /* Canada */
+ __DST_GB__ /* Great Britain and Eire */
+ __DST_RUM__ /* Rumania */
+ __DST_TUR__ /* Turkey */
+ __DST_AUSTALT__ /* Australian style with shift in 1986 */
+Of course it turned out that the period in which Daylight Saving Time is in force cannot be given by a simple algorithm, one per country; indeed, this period is determined by unpredictable political decisions. So this method of representing time zones has been abandoned.
-__DST_NONE__ /* not
on dst */__
-DST_USA__ /* USA style dst */__
-DST_AUST__ /* Australian style dst */__
-DST_WET__ /* Western European dst */__
-DST_MET__ /* Middle European dst */__
-DST_EET__ /* Eastern European dst */__
-DST_CAN__ /* Canada */__
-DST_GB__ /* Great Britain and Eire */__
-DST_RUM__ /* Rumania */__
-DST_TUR__ /* Turkey */__
-DST_AUSTALT__ /* Australian style with shift in 1986
-*/
+The following macros are defined to operate
on a struct timeval :
+ #define timerisset(tvp)\
+ ((tvp)->tv_sec || (tvp)->tv_usec)
+ #define timercmp(tvp, uvp, cmp)\
+ ((tvp)->tv_sec cmp (uvp)->tv_sec ||\
+ (tvp)->tv_sec == (uvp)->tv_sec &&\
+ (tvp)->tv_usec cmp (uvp)->tv_usec)
+ #define timerclear(tvp)\
+ ((tvp)->tv_sec = (tvp)->tv_usec = 0)
-Of course it turned out that the period in which Daylight
-Saving Time is in force cannot be given by a simple
-algorithm, one per country; indeed, this period is
-determined by unpredictable political decisions. So this
-method of representing time zones has been abandoned. Under
-Linux, in a call to __settimeofday__ the
-''tz_dsttime'' field should be zero.
-
-Under Linux there is some peculiar `warp clock' semantics
-associated to the __settimeofday__ system call if on the
-very first call (after booting) that has a non-NULL
-''tz'' argument, the ''tv'' argument is NULL and the
-''tz_minuteswest'' field is nonzero. In such a case it is
-assumed that the CMOS clock is on local time, and that it
-has to be incremented by this amount to get UTC system time.
-No doubt it is a bad idea to use this feature.
-
-
-The following macros are defined to operate on a struct
-timeval :
-
-
-#define timerisset(tvp)\
-((tvp)-
If either ''tv'' or ''tz'' is null, the corresponding structure is not set or returned.
-
-Only the super user may use
-__settimeofday__.
!!RETURN VALUE
+gettimeofday(2) return 0 for success, or -1 for failure (in which case ''errno'' is set appropriately).
-
-__gettimeofday__ and __settimeofday__ return 0 for
-success, or -1 for failure (in which case ''errno'' is
-set appropriately).
!!ERRORS
+;[EINVAL]: Timezone (or something else) is invalid.
+;[EFAULT]: One of ''tv'' or ''tz'' pointed outside your accessible address space.
-
-__EPERM__
-
-
-__settimeofday__ is called by someone other than the
-superuser.
-
-
-__EINVAL__
-
-
-Timezone (or something else) is invalid.
-
-
-__EFAULT__
-
-
-One of ''tv'' or ''tz'' pointed outside your
-accessible address space.
!!NOTE
+The defines for __timercmp__, __timerisset__, __timerclear__, __timeradd__, __timersub__ are (since glibc2.2.2) only available if ___BSD_SOURCE__ is defined (either explicitly, or implicitly, by not defining _POSIX_SOURCE or compiling with the -ansi flag).
-
-The prototype for __settimeofday__ and the defines for
-__timercmp__, __timerisset__, __timerclear__,
-__timeradd__, __timersub__ are (since glibc2.2.2) only
-available if ___BSD_SOURCE__ is defined (either
-explicitly, or implicitly, by not defining _POSIX_SOURCE or
-compiling with the -ansi flag).
!!CONFORMING TO
+SVr4, BSD 4.3
-
-SVr4, BSD 4.3
!!SEE ALSO
-
-
-
date(1), adjtimex(2), time(2),
-
ctime(3), ftime(3)
-----
+date(1), adjtimex(2), time(2), ctime(3), ftime(3)