Manpages

名 前

adjtime − シ ス テ ム ク ロ ッ ク に 同 期 す る 時 刻 を 調 整 す る

書 式

#include <sys/time.h>

int adjtime(const struct timeval *delta, struct timeval *olddelta);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

adjtime(): _BSD_SOURCE

説 明

adjtime() 関 数 は (gettimeofday(2) が 返 す ) シ ス テ ム ク ロ ッ ク を 徐 々 に 調 整 す る 。 調 整 す べ き ク ロ ッ ク の 時 間 量 は delta が 指 す 構 造 体 で 指 定 さ れ る 。 こ の 構 造 体 は 以 下 の 形 で あ る :

struct timeval {
time_t tv_sec; /* 秒 */
suseconds_t tv_usec; /* マ イ ク ロ 秒 */ };

delta の 調 整 量 が 正 の 場 合 、 調 整 量 に 達 す る ま で シ ス テ ム ク ロ ッ ク を 少 し 割 合 だ け ス ピ ー ド ア ッ プ さ せ る (つ ま り 、 毎 秒 ク ロ ッ ク 値 に 少 し だ け 時 刻 を 加 算 す る )。 delta の 調 整 量 が 負 の 場 合 、 同 様 の 方 法 で ク ロ ッ ク を 遅 く す る 。

adjtime() が 呼 び 出 さ れ た と き に 以 前 の adjtime() の 呼 び 出 し に よ る ク ロ ッ ク の 調 整 が ま だ 実 行 中 で 、 か つ 後 の adjtime() の delta が NULL で な い 場 合 、 実 行 中 の 調 整 は 停 止 さ れ る 。 し か し 、 す で に 実 行 さ れ た 調 整 の 取 り 消 し は 行 わ れ な い 。

olddelta が NULL で な い 場 合 、 olddelta が 指 す バ ッ フ ァ ー に 、 過 去 の 調 整 要 求 で ま だ 完 了 せ ず 残 っ て い る 時 間 量 が 格 納 し て 返 さ れ る 。

返 り 値

成 功 す る と 、 adjtime() は 0 を 返 す 。 失 敗 す る と 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を セ ッ ト す る 。

エ ラ ー

EINVAL

delta で 指 定 さ れ た 調 整 量 が 許 可 さ れ た 範 囲 に 入 っ て い な い 。

EPERM

呼 び 出 し 者 が 時 刻 を 調 整 す る の に 必 要 な 権 限 を 持 っ て い な い 。 Linux で は CAP_SYS_TIME ケ ー パ ビ リ テ ィ が 必 要 で あ る 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )

adjtime() 関 数 は ス レ ッ ド セ ー フ で あ る 。

準 拠

4.3BSD, System V.

注 意

adjtime() が 行 う ク ロ ッ ク の 調 整 は 、 ク ロ ッ ク は 常 に 単 調 増 加 す る と い う 範 囲 内 で 実 行 さ れ る 。 adjtime() を 使 っ て 時 刻 を 調 整 す る こ と で 、 シ ス テ ム タ イ ム の 突 然 の 正 や 負 の ジ ャ ン プ に よ り 、 い く つ か の ア プ リ ケ ー シ ョ ン (例 え ば make(1) な ど ) に 起 こ る 問 題 を 防 ぐ こ と が で き る 。

adjtime() は シ ス テ ム 時 刻 に 少 し ず つ 調 整 を 行 う た め に 使 用 さ れ る こ と を 期 待 さ れ て い る 。 ほ と ん ど の シ ス テ ム で は 、 delta に 指 定 で き る 調 整 量 に 制 限 を 課 し て い る 。 glibc の 実 装 で は 、 delta は (INT_MIN / 1000000 + 2) 以 上 (INT_MAX / 1000000 − 2) 以 下 (i386 で は −2145 以 上 2145 以 下 ) で な け れ ば な ら な い 。

バ グ

ず っ と 昔 か ら 、 delta に NULL を 指 定 す る と 、 未 完 了 の ク ロ ッ ク 調 整 に 関 す る 有 効 な 情 報 が olddelta に 返 さ れ な い と い う バ グ が あ っ た (こ の 場 合 、 adjtime() は 、 未 完 了 の ク ロ ッ ク 調 整 に 関 す る 情 報 を 、 変 更 せ ず に 返 す べ き で あ る )。 こ の バ グ は 、 glibc 2.8 以 降 で 、 Linux カ ー ネ ル 2.6.26 以 降 の シ ス テ ム で 修 正 さ れ て い る 。

関 連 項 目

adjtimex(2), gettimeofday(2), time(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。