|
timer_settime, timer_gettime — arm/disarm and fetch state of POSIX per-process timer
#include <time.h>
int
timer_settime( |
timer_t timerid, |
int flags, | |
const struct itimerspec *new_value, | |
struct itimerspec * old_value) ; |
int
timer_gettime( |
timer_t timerid, |
struct itimerspec *curr_value) ; |
Note | |||
---|---|---|---|
|
Note | |
---|---|
Link with |
timer_settime
() arms or
disarms the timer identified by timerid
. The new_value
argument is pointer
to an itimerspec structure
that specifies the new initial value and the new interval for
the timer. The itimerspec
structure is defined as follows:
struct timespec { time_t tv_sec
; /* Seconds */long tv_nsec
; /* Nanoseconds */}; struct itimerspec { struct timespec it_interval
; /* Timer interval */struct timespec it_value
; /* Initial expiration */};
Each of the substructures of the itimerspec structure is a timespec
structure that
allows a time value to be specified in seconds and
nanoseconds. These time values are measured according to the
clock that was specified when the timer was created by
timer_create(2)
If new_value->it_value
specifies a nonzero value (i.e., either subfield is nonzero),
then timer_settime
() arms
(starts) the timer, setting it to initially expire at the
given time. (If the timer was already armed, then the
previous settings are overwritten.) If new_value->it_value
specifies a zero value (i.e., both subfields are zero), then
the timer is disarmed.
The new_value->it_interval
field specifies the period of the timer, in seconds and
nanoseconds. If this field is nonzero, then each time that an
armed timer expires, the timer is reloaded from the value
specified in new_value->it_interval
. If
new_value->it_interval
specifies a zero value then the timer expires just once, at
the time specified by it_value
.
By default, the initial expiration time specified in
new_value->it_value
is
interpreted relative to the current time on the timer's clock
at the time of the call. This can be modified by specifying
TIMER_ABSTIME
in flags
, in which case new_value->it_value
is
interpreted as an absolute value as measured on the timer's
clock; that is, the timer will expire when the clock value
reaches the value specified by new_value->it_value
. If
the specified absolute time has already passed, then the
timer expires immediately, and the overrun count (see
timer_getoverrun(2)) will
be set correctly.
If the value of the CLOCK_REALTIME
clock is adjusted while an
absolute timer based on that clock is armed, then the
expiration of the timer will be appropriately adjusted.
Adjustments to the CLOCK_REALTIME
clock have no effect on
relative timers based on that clock.
If old_value
is
not NULL, then it points to a buffer that is used to return
the previous interval of the timer (in old_value->it_interval
)
and the amount of time until the timer would previously have
next expired (in old_value->it_value
).
timer_gettime
() returns the
time until next expiration, and the interval, for the timer
specified by timerid
,
in the buffer pointed to by curr_value
. The time remaining
until the next timer expiration is returned in curr_value->it_value
; this
is always a relative value, regardless of whether the
TIMER_ABSTIME
flag was used
when arming the timer. If the value returned in curr_value->it_value
is
zero, then the timer is currently disarmed. The timer
interval is returned in curr_value->it_interval
.
If the value returned in curr_value->it_interval
is
zero, then this is a "one-shot" timer.
On success, timer_settime
()
and timer_gettime
() return 0.
On error, −1 is returned, and errno
is set to indicate the error.
These functions may fail with the following errors:
new_value
,
old_value
, or
curr_value
is
not a valid pointer.
timerid
is
invalid.
timer_settime
() may fail
with the following errors:
new_value.it_value
is
negative; or new_value.it_value.tv_nsec
is negative or greater than 999,999,999.
This page is part of release 3.52 of the Linux man-pages
project. A
description of the project, and information about reporting
bugs, can be found at
http://www.kernel.org/doc/man−pages/.
Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk <mtk.manpagesgmail.com> %%%LICENSE_START(VERBATIM) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. %%%LICENSE_END |