summaryrefslogtreecommitdiffstats
path: root/man3/clock_getres.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/clock_getres.3')
-rw-r--r--man3/clock_getres.3195
1 files changed, 195 insertions, 0 deletions
diff --git a/man3/clock_getres.3 b/man3/clock_getres.3
new file mode 100644
index 000000000..407e85793
--- /dev/null
+++ b/man3/clock_getres.3
@@ -0,0 +1,195 @@
+.\" Hey Emacs! This file is -*- nroff -*- source.
+.\"
+.\" Copyright (c) 2003 Nick Clifford (zaf@nrc.co.nz), Jan 25, 2003
+.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl), Aug 24, 2003
+.\"
+.\" 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.
+.\"
+.\" 2003-08-23 Martin Schulze <joey@infodrom.org> improvements
+.\" 2003-08-24 aeb, large parts rewritten
+.\" 2004-08-06 Christoph Lameter <clameter@sgi.com>, SMP note
+.\"
+.TH CLOCK_GETRES 3 2003-08-24 "" "Linux Programmer's Manual"
+.SH NAME
+clock_getres, clock_gettime, clock_settime \- clock and time functions
+.SH SYNOPSIS
+.B #include <time.h>
+.sp
+.BI "int clock_getres(clockid_t " clk_id ", struct timespec *" res );
+.br
+.BI "int clock_gettime(clockid_t " clk_id ", struct timespec *" tp );
+.br
+.BI "int clock_settime(clockid_t " clk_id ", const struct timespec *" tp );
+.SH DESCRIPTION
+The function
+.BR clock_getres ()
+finds the resolution (precision) of the specified clock
+.IR clk_id ,
+and, if
+.I res
+is non-NULL, stores it in the struct timespec pointed to by
+.IR res .
+The resolution of clocks depends on the implementation and cannot be
+configured by a particular process.
+If the time value pointed to by the argument
+.I tp
+of
+.BR clock_settime ()
+is not a multiple of
+.IR res ,
+then it is truncated to a multiple of
+.IR res .
+.PP
+The functions
+.BR clock_gettime ()
+and
+.BR clock_settime ()
+retrieve and set the time of the specified clock
+.IR clk_id .
+.PP
+The
+.I res
+and
+.I tp
+arguments are
+.B timespec
+structs, as specified in
+.IR <time.h> :
+.sp
+.nf
+struct timespec {
+.in +8
+time_t tv_sec; /* seconds */
+long tv_nsec; /* nanoseconds */
+.in -8
+};
+.fi
+.PP
+The
+.I clk_id
+argument is the identifier of the particular clock on which to act.
+A clock may be system-wide and hence visible for all processes, or
+per-process if it measures time only within a single process.
+.LP
+All implementations support the system-wide realtime clock,
+which is identified by
+.BR CLOCK_REALTIME .
+Its time represents seconds and nanoseconds since the Epoch.
+When its time is changed, timers for a relative interval are
+unaffected, but timers for an absolute point in time are affected.
+.LP
+More clocks may be implemented. The interpretation of the
+corresponding time values and the effect on timers is unspecified.
+.LP
+Sufficiently recent versions of GNU libc and the Linux kernel
+support the following clocks:
+.TP
+.B CLOCK_REALTIME
+System-wide realtime clock.
+Setting this clock requires appropriate privileges.
+.TP
+.B CLOCK_MONOTONIC
+Clock that cannot be set and represents monotonic time since
+some unspecified starting point.
+.TP
+.B CLOCK_PROCESS_CPUTIME_ID
+High-resolution per-process timer from the CPU.
+.TP
+.B CLOCK_THREAD_CPUTIME_ID
+Thread-specific CPU-time clock.
+.SH "RETURN VALUE"
+.BR clock_gettime "(), " clock_settime ()
+and
+.BR clock_getres ()
+return 0 for success, or \-1 for failure (in which case
+.I errno
+is set appropriately).
+.SH ERRORS
+.TP
+.B EFAULT
+.I tp
+points outside the accessible address space.
+.TP
+.B EINVAL
+The
+.I clk_id
+specified is not supported on this system.
+.TP
+.B EPERM
+.BR clock_settime ()
+does not have permission to set the clock indicated.
+.SH NOTE
+Most systems require the program be linked with the librt
+library to use these functions.
+.SH NOTE for SMP systems
+The
+.B CLOCK_PROCESS_CPUTIME_ID
+and
+.B CLOCK_THREAD_CPUTIME_ID
+clocks are realized on many platforms using timers from the CPUs
+(TSC on i386, AR.ITC on Itanium).
+These registers may differ between CPUs and as a consequence
+these clocks may return
+.B bogus results
+if a process is migrated to another CPU.
+.PP
+If the CPUs in an SMP system have different clock sources then
+there is no way to maintain a correlation between the timer registers since
+each CPU will run at a slightly different frequency. If that is the case then
+.I clock_getcpuclockid(0)
+will return
+.B ENOENT
+to signify this condition. The two clocks will then only be useful if it
+can be ensured that a process stays on a certain CPU.
+.PP
+The processors in an SMP system do not start all at exactly the same
+time and therefore the timer registers are typically running at an offset.
+Some architectures include code that attempts to limit these offsets on bootup.
+However, the code cannot guarantee to accurately tune the offsets.
+Glibc contains no provisions to deal with these offsets (unlike the Linux
+Kernel). Typically these offsets are small and therefore the effects may be
+negligible in most cases.
+.SH AVAILABILITY
+On POSIX systems on which these functions are available, the symbol
+.B _POSIX_TIMERS
+is defined in <unistd.h> to a value greater than 0.
+The symbols
+.BR _POSIX_MONOTONIC_CLOCK ,
+.BR _POSIX_CPUTIME ,
+.B _POSIX_THREAD_CPUTIME
+indicate that
+.BR CLOCK_MONOTONIC ,
+.BR CLOCK_PROCESS_CPUTIME_ID ,
+.B CLOCK_THREAD_CPUTIME_ID
+are available.
+(See also
+.BR sysconf (3).)
+.SH "CONFORMING TO"
+SUSv2, POSIX 1003.1-2001.
+.SH "SEE ALSO"
+.BR date (1),
+.BR adjtimex (2),
+.BR gettimeofday (2),
+.BR settimeofday (2),
+.BR time (2),
+.BR ctime (3),
+.BR ftime (3),
+.BR sysconf (3)