ADJTIME - Linux手册页

时间:2019-08-20 17:59:51  来源:igfitidea点击:

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)。

InterfaceAttributeValue
adjtime()Thread safetyMT-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/