xref: /386bsd/usr/src/lib/libc/sys/getitimer.2 (revision a2142627)
1.\" Copyright (c) 1983, 1991 The Regents of the University of California.
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\"    must display the following acknowledgement:
14.\"	This product includes software developed by the University of
15.\"	California, Berkeley and its contributors.
16.\" 4. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"     @(#)getitimer.2	6.6 (Berkeley) 3/10/91
33.\"
34.Dd March 10, 1991
35.Dt GETITIMER 2
36.Os BSD 4.2
37.Sh NAME
38.Nm getitimer ,
39.Nm setitimer
40.Nd get/set value of interval timer
41.Sh SYNOPSIS
42.Fd #include <sys/time.h>
43.Fd #define ITIMER_REAL		0
44.Fd #define ITIMER_VIRTUAL	1
45.Fd #define ITIMER_PROF		2
46.Ft int
47.Fn getitimer "int which" "struct itimerval *value"
48.Ft int
49.Fn setitimer "int which" "struct itimerval *value" "struct itimerval *ovalue"
50.Sh DESCRIPTION
51The system provides each process with three interval timers,
52defined in
53.Ao Pa sys/time.h Ac .
54The
55.Fn getitimer
56call returns the current value for the timer specified in
57.Fa which
58in the structure at
59.Fa value .
60The
61.Fn setitimer
62call sets a timer to the specified
63.Fa value
64(returning the previous value of the timer if
65.Fa ovalue
66is non-nil).
67.Pp
68A timer value is defined by the
69.Fa itimerval
70structure:
71.Bd -literal -offset indent
72struct itimerval {
73	struct	timeval it_interval;	/* timer interval */
74	struct	timeval it_value;	/* current value */
75};
76.Ed
77.Pp
78If
79.Fa it_value
80is non-zero, it indicates the time to the next timer expiration.
81If
82.Fa it_interval
83is non-zero, it specifies a value to be used in reloading
84.Fa it_value
85when the timer expires.
86Setting
87.Fa it_value
88to 0 disables a timer.  Setting
89.Fa it_interval
90to 0 causes a timer to be disabled after its next expiration (assuming
91.Fa it_value
92is non-zero).
93.Pp
94Time values smaller than the resolution of the
95system clock are rounded up to this resolution
96(typically 10 milliseconds).
97.Pp
98The
99.Dv ITIMER_REAL
100timer decrements in real time.  A
101.Dv SIGALRM
102signal is
103delivered when this timer expires.
104.Pp
105The
106.Dv ITIMER_VIRTUAL
107timer decrements in process virtual time.
108It runs only when the process is executing.  A
109.Dv SIGVTALRM
110signal
111is delivered when it expires.
112.Pp
113The
114.Dv ITIMER_PROF
115timer decrements both in process virtual time and
116when the system is running on behalf of the process.  It is designed
117to be used by interpreters in statistically profiling the execution
118of interpreted programs.
119Each time the
120.Dv ITIMER_PROF
121timer expires, the
122.Dv SIGPROF
123signal is
124delivered.  Because this signal may interrupt in-progress
125system calls, programs using this timer must be prepared to
126restart interrupted system calls.
127.Sh NOTES
128Three macros for manipulating time values are defined in
129.Ao Pa sys/time.h Ac .
130.Fa Timerclear
131sets a time value to zero,
132.Fa timerisset
133tests if a time value is non-zero, and
134.Fa timercmp
135compares two time values (beware that >= and <= do not
136work with this macro).
137.Sh RETURN VALUES
138If the calls succeed, a value of 0 is returned.  If an error occurs,
139the value -1 is returned, and a more precise error code is placed
140in the global variable
141.Va errno .
142.Sh ERRORS
143.Fn Getitimer
144and
145.Fn setitimer
146will fail if:
147.Bl -tag -width Er
148.It Bq Er EFAULT
149The
150.Fa value
151parameter specified a bad address.
152.It Bq Er EINVAL
153A
154.Fa value
155parameter specified a time was too large
156to be handled.
157.El
158.Sh SEE ALSO
159.Xr select 2 ,
160.Xr sigvec 2 ,
161.Xr gettimeofday 2
162.Sh HISTORY
163The
164.Nm
165function call appeared in
166.Bx 4.2 .
167