ADJTIME - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-15
名称
adjtime-更正时间以同步系统时钟
语法
#include <sys/time.h> int adjtime(const struct timeval *delta, struct timeval *olddelta);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
adjtime():
从glibc 2.19开始:
_DEFAULT_SOURCE
Glibc 2.19及更早版本:
_BSD_SOURCE
说明
adjtime()函数逐渐调整系统时钟(由gettimeofday(2)返回)。在delta指向的结构中指定了要调整时钟的时间量。该结构具有以下形式:
struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ };
如果增量调整为正,则系统时钟将以较小的百分比(即,通过在每秒的时钟值中添加少量时间)来加快速度,直到调整完成。如果增量调整为负,则时钟将以类似方式降低速度。
如果在以后的adjtime()调用时已经进行了来自较早adjtime()调用的时钟调整,并且对于以后的调用delta不为NULL,则将停止较早的调整,但是任何已完成的部分调整未完成。
如果olddelta不为NULL,则使用它指向的缓冲区返回尚未完成的任何先前调整所剩余的时间。
返回值
成功时,adjtime()返回0。失败时,返回-1,并设置errno以指示错误。
错误说明
- EINVAL
- 增量调整超出了允许范围。
- EPERM
- 呼叫者没有足够的特权来调整时间。在Linux下,需要CAP_SYS_TIME功能。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
adjtime() | Thread safety | MT-Safe |
遵循规范
4.3 BSD,系统V。
备注
adjtime()对时钟的调整以时钟总是单调递增的方式进行。使用adjtime()调整时间可以防止某些应用程序(例如make(1))由于系统时间的突然正跳或负跳而引起的问题。
adjtime()用于对系统时间进行小的调整。大多数系统对可在增量中指定的调整施加限制。在glibc实现中,增量必须小于或等于(INT_MAX / 1000000-2)且大于或等于(INT_MIN / 1000000 + 2)(在i386上分别为2145和-2145秒)。
BUGS
一个长期存在的错误意味着,如果将delta设置为NULL,则在olddelta中不会返回有关未完成的时钟调整的有效信息。 (在这种情况下,adjtime()应该返回未完成的时钟调整,而不进行更改。)此错误已在具有glibc 2.8或更高版本以及Linux内核2.6.26或更高版本的系统上修复。
另外参见
adjtimex(2),gettimeofday(2),time(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。