Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CLOCK_GETTIME(2)	       System Calls Manual		CLOCK_GETTIME(2)

NAME
     clock_gettime,  clock_settime,  clock_getres  -- get/set/calibrate date and
     time

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <time.h>

     int
     clock_gettime(clockid_t clock_id, struct timespec *tp);

     int
     clock_settime(clockid_t clock_id, const struct timespec *tp);

     int
     clock_getres(clockid_t clock_id, struct timespec *tp);

DESCRIPTION
     The clock_gettime() and clock_settime()  system  calls  allow  the  calling
     process  to retrieve or set the value used by a clock which is specified by
     clock_id.

     The clock_id argument can be a value obtained  from  clock_getcpuclockid(3)
     or pthread_getcpuclockid(3) as well as the following values:

     CLOCK_REALTIME
     CLOCK_REALTIME_PRECISE
     CLOCK_REALTIME_FAST
     CLOCK_REALTIME_COARSE
	     Increments  in  SI seconds like a wall clock.  It uses a 1970 epoch
	     and implements the UTC timescale.	The count of physical SI seconds
	     since 1970, adjusted by subtracting the  number  of  positive  leap
	     seconds  and  adding the number of negative leap seconds.	Behavior
	     during a leap second is not defined by and POSIX standard.
     CLOCK_MONOTONIC
     CLOCK_MONOTONIC_PRECISE
     CLOCK_MONOTONIC_FAST
     CLOCK_MONOTONIC_COARSE
     CLOCK_BOOTTIME
	     Increments in SI seconds, even while the system is suspended.   Its
	     epoch  is	unspecified.  The count is not adjusted by leap seconds.
	     FreeBSD implements
     CLOCK_UPTIME
     CLOCK_UPTIME_PRECISE
     CLOCK_UPTIME_FAST
	     Increments monotonically in SI seconds while the  machine	is  run-
	     ning.  The count is not adjusted by leap seconds.	The epoch is un-
	     specified.
     CLOCK_VIRTUAL
	     Increments  only  when the CPU is running in user mode on behalf of
	     the calling process.
     CLOCK_PROF
	     Increments when the CPU is running in user or kernel mode.
     CLOCK_SECOND
	     Returns the current second without performing a full  time  counter
	     query, using an in-kernel cached value of the current second.
     CLOCK_PROCESS_CPUTIME_ID
	     Returns the execution time of the calling process.
     CLOCK_THREAD_CPUTIME_ID
	     Returns the execution time of the calling thread.
     CLOCK_TAI
	     Increments  in  SI seconds like a wall clock.  It uses a 1970 epoch
	     and implements the TAI timescale.	Similar to  CLOCK_REALTIME,  but
	     without leap seconds.  It will increase monotonically during a leap
	     second.   Will  return EINVAL if the current offset between TAI and
	     UTC is not known, which may be the case early in boot before NTP or
	     other time daemon has synchronized.

     The clock IDs CLOCK_BOOTTIME, CLOCK_REALTIME,  CLOCK_TAI,	CLOCK_MONOTONIC,
     and CLOCK_UPTIME perform a full time counter query.  The clock IDs with the
     _FAST   suffix,   i.e.,   CLOCK_REALTIME_FAST,   CLOCK_MONOTONIC_FAST,  and
     CLOCK_UPTIME_FAST, do not perform a full time counter query, so their accu-
     racy   is	 one	timer	 tick.	   Similarly,	 CLOCK_REALTIME_PRECISE,
     CLOCK_MONOTONIC_PRECISE,  and CLOCK_UPTIME_PRECISE are used to get the most
     exact value as possible, at the expense of execution time.  The  clock  IDs
     CLOCK_REALTIME_COARSE and CLOCK_MONOTONIC_COARSE are aliases of correspond-
     ing  IDs  with _FAST suffix for compatibility with other systems.	Finally,
     CLOCK_BOOTTIME is an alias for CLOCK_MONOTONIC for compatibility with other
     systems and is unrelated to the kern.boottime sysctl(8).

     The structure pointed to by tp is defined in <sys/timespec.h> as:

     struct timespec {
	     time_t  tv_sec;	     /* seconds */
	     long    tv_nsec;	     /* and nanoseconds */
     };

     Only the super-user may set the time of day, using only CLOCK_REALTIME.  If
     the system securelevel(7) is greater than 1 (see  init(8)),  the  time  may
     only be advanced.	This limitation is imposed to prevent a malicious super-
     user  from  setting  arbitrary  time  stamps on files.  The system time can
     still be adjusted backwards using the adjtime(2) system call even when  the
     system is secure.

     The  resolution  (granularity) of a clock is returned by the clock_getres()
     system call.  This value is placed in a (non-NULL) *tp.

RETURN VALUES
     Upon successful completion, the value 0 is returned; otherwise the value -1
     is returned and the global variable errno is set to indicate the error.

ERRORS
     The following error codes may be set in errno:

     [EINVAL]		The clock_id or timespec argument was not a valid value.

     [EPERM]		A user other than the super-user attempted  to	set  the
			time.

SEE ALSO
     date(1),	adjtime(2),  clock_getcpuclockid(3),  ctime(3),  pthread_getcpu-
     clockid(3)

STANDARDS
     The clock_gettime(), clock_settime(), and clock_getres() system calls  con-
     form  to  IEEE  Std 1003.1-2008 ("POSIX.1").  The clock IDs CLOCK_BOOTTIME,
     CLOCK_MONOTONIC_FAST,     CLOCK_MONOTONIC_PRECISE,     CLOCK_REALTIME_FAST,
     CLOCK_REALTIME_PRECISE,	  CLOCK_SECOND,     CLOCK_TAI,	   CLOCK_UPTIME,
     CLOCK_UPTIME_FAST, and CLOCK_UPTIME_PRECISE are FreeBSD extensions  to  the
     POSIX interface.

     UTC  is defined by ITU-R TF.460-6, Standard-frequency and time-signal emis-
     sions.  However, the time_t type is a simple count that does not provide  a
     unique  encoding  for  leap  seconds,  nor  a specification for what values
     should be used to encode a leap second.

HISTORY
     The clock_gettime(), clock_settime(), and clock_getres() system calls first
     appeared in FreeBSD 3.0.

FreeBSD ports 15.quarterly	 August 10, 2024		CLOCK_GETTIME(2)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=clock_settime&sektion=2&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help