| .\" Copyright (c) 2007 by Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" |
| .\" SPDX-License-Identifier: Linux-man-pages-copyleft |
| .\" |
| .\" 2007-07-31, mtk, Created |
| .\" |
| .TH timeradd 3 (date) "Linux man-pages (unreleased)" |
| .SH NAME |
| timeradd, timersub, timercmp, timerclear, timerisset \- timeval operations |
| .SH LIBRARY |
| Standard C library |
| .RI ( libc ,\~ \-lc ) |
| .SH SYNOPSIS |
| .nf |
| .B #include <sys/time.h> |
| .P |
| .BI "void timeradd(struct timeval *" a ", struct timeval *" b , |
| .BI " struct timeval *" res ); |
| .BI "void timersub(struct timeval *" a ", struct timeval *" b , |
| .BI " struct timeval *" res ); |
| .P |
| .BI "void timerclear(struct timeval *" tvp ); |
| .BI "int timerisset(struct timeval *" tvp ); |
| .P |
| .BI "int timercmp(struct timeval *" a ", struct timeval *" b ", " CMP ); |
| .fi |
| .P |
| .RS -4 |
| Feature Test Macro Requirements for glibc (see |
| .BR feature_test_macros (7)): |
| .RE |
| .P |
| All functions shown above: |
| .nf |
| Since glibc 2.19: |
| _DEFAULT_SOURCE |
| glibc 2.19 and earlier: |
| _BSD_SOURCE |
| .fi |
| .SH DESCRIPTION |
| The macros are provided to operate on |
| .I timeval |
| structures, defined in |
| .I <sys/time.h> |
| as: |
| .P |
| .in +4n |
| .EX |
| struct timeval { |
| time_t tv_sec; /* seconds */ |
| suseconds_t tv_usec; /* microseconds */ |
| }; |
| .EE |
| .in |
| .P |
| .BR timeradd () |
| adds the time values in |
| .I a |
| and |
| .IR b , |
| and places the sum in the |
| .I timeval |
| pointed to by |
| .IR res . |
| The result is normalized such that |
| .I res\->tv_usec |
| has a value in the range 0 to 999,999. |
| .P |
| .BR timersub () |
| subtracts the time value in |
| .I b |
| from the time value in |
| .IR a , |
| and places the result in the |
| .I timeval |
| pointed to by |
| .IR res . |
| The result is normalized such that |
| .I res\->tv_usec |
| has a value in the range 0 to 999,999. |
| .P |
| .BR timerclear () |
| zeros out the |
| .I timeval |
| structure pointed to by |
| .IR tvp , |
| so that it represents the Epoch: 1970-01-01 00:00:00 +0000 (UTC). |
| .P |
| .BR timerisset () |
| returns true (nonzero) if either field of the |
| .I timeval |
| structure pointed to by |
| .I tvp |
| contains a nonzero value. |
| .P |
| .BR timercmp () |
| compares the timer values in |
| .I a |
| and |
| .I b |
| using the comparison operator |
| .IR CMP , |
| and returns true (nonzero) or false (0) depending on |
| the result of the comparison. |
| Some systems (but not Linux/glibc), |
| have a broken |
| .BR timercmp () |
| implementation, |
| .\" HP-UX, Tru64, Irix have a definition like: |
| .\"#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) |
| in which |
| .I CMP |
| of |
| .IR >= , |
| .IR <= , |
| and |
| .I == |
| do not work; |
| portable applications can instead use |
| .P |
| .in +4n |
| .EX |
| !timercmp(..., <) |
| !timercmp(..., >) |
| !timercmp(..., !=) |
| .EE |
| .in |
| .SH RETURN VALUE |
| .BR timerisset () |
| and |
| .BR timercmp () |
| return true (nonzero) or false (0). |
| .SH ERRORS |
| No errors are defined. |
| .SH STANDARDS |
| None. |
| .SH HISTORY |
| BSD. |
| .SH SEE ALSO |
| .BR gettimeofday (2), |
| .BR time (7) |