Manpages

名 前

adjtimex − カ ー ネ ル の 時 計 を 調 整 す る

書 式

#define _BSD_SOURCE /* feature_test_macros(7) 参 照 */
#include <sys/timex.h>

int adjtimex(struct timex *buf);

説 明

Linux は David L. Mill の 時 計 調 節 ア ル ゴ リ ズ ム を 使 用 し て い る (RFC 5905 を 参 照 )。 シ ス テ ム コ ー ル adjtimex() は こ の ア ル ゴ リ ズ ム の 調 節 の パ ラ メ ー タ ー を 読 み 取 っ た り 、 設 定 し た り す る 。 こ の 関 数 は timex 構 造 体 へ の ポ イ ン タ ー を 受 け 取 り 、 そ の 値 で カ ー ネ ル の パ ラ メ ー タ ー を 更 新 し て 、 同 じ 構 造 体 に 現 在 の カ ー ネ ル の 値 を 返 す 。 こ の 構 造 体 は 以 下 の よ う に 宣 言 さ れ る :

struct timex {
int modes; /* モ ー ド の 選 択 */
long offset; /* 時 刻 オ フ セ ッ ト ; STA_NANO ス テ ー タ ス フ ラ グ が 設 定 さ れ る と ナ ノ 秒 で 、 そ れ 以 外 は マ イ ク ロ 秒
*/
long freq; /* 周 波 数 オ フ セ ッ ト 。 単 位 は 2^−16 ppm
(parts per million)。 「 注 意 」 を 参 照 */
long maxerror; /* 最 大 エ ラ ー (マ イ ク ロ 秒 ) */
long esterror; /* 推 定 エ ラ ー (マ イ ク ロ 秒 ) */
int status; /* ク ロ ッ ク コ マ ン ド /ス テ ー タ ス */
long constant; /* PLL (phase−locked loop) 時 刻 定 数 */
long precision; /* ク ロ ッ ク 精 度 (マ イ ク ロ 秒 、 読 み 出 し 専 用 ) */
long tolerance; /* ク ロ ッ ク 周 波 数 耐 性 (ppm、 読 み 出 し 専 用 ) */
struct timeval time;
/* 現 在 時 刻 (読 み 出 し 専 用 、 ADJ_SETOFFSET の 場 合 以 外
); リ タ ー ン 時 は time.tv_usec は
STA_NANO ス テ ー タ ス フ ラ グ が 設 定 さ れ る と ナ ノ 秒 で 、 そ れ 以 外 は マ イ ク ロ 秒
*/
long tick; /* ク ロ ッ ク tick 間 の マ イ ク ロ 秒 */
long ppsfreq; /* PPS (pulse per second) 周 波 数 (単 位 は
2^−16 ppm、 「 注 意 」 を 参 照 、 読 み 出 し 専 用 ) */
long jitter; /* PPS ジ ッ タ ー (読 み 出 し 専 用 ); STA_NANO ス テ ー タ ス フ ラ グ が 設 定 さ れ る と ナ ノ 秒 、 そ れ 以 外 は マ イ ク ロ 秒
*/
int shift; /* PPS interval duration (秒 、 読 み 出 し 専 用 ) */
long stabil; /* PPS 安 定 性 (2^−16 ppm、 「 注 意 」 を 参 照 、 読 み 出 し 専 用
) */
long jitcnt; /* PPS ジ ッ タ ー 上 限 超 過 (読 み 出 し 専 用 ) */
long calcnt; /* PPS 校 正 間 隔 (読 み 出 し 専 用 ) */
long errcnt; /* PPS 校 正 エ ラ ー (読 み 出 し 専 用 ) */
long stbcnt; /* PPS 安 定 性 上 限 超 過 (読 み 出 し 専 用 ) */
int tai; /* TAI オ フ セ ッ ト 、 直 前 の ADJ_TAI 命 令 で 設 定 し た も の
(秒 、 読 み 出 し 専 用 、
Linux 2.6.26 以 降 ) */
/* こ れ 以 降 の パ デ ィ ン グ バ イ ト は 将 来 の 拡 張 用 で あ る */ };

modes フ ィ ー ル ド は (必 要 に 応 じ て ) ど の パ ラ メ ー タ ー を 設 定 す る か 決 定 す る 。 以 下 の ビ ッ ト 値 の 0 個 以 上 の ビ ッ ト OR か ら な る ビ ッ ト マ ス ク で あ る 。
ADJ_OFFSET

buf.offset を 時 刻 オ フ セ ッ ト を 設 定 す る 。

ADJ_FREQUENCY

buf.freq を 周 波 数 オ フ セ ッ ト を 設 定 す る 。

ADJ_MAXERROR

buf.maxerror を 最 大 時 刻 エ ラ ー を 設 定 す る 。

ADJ_ESTERROR

buf.esterror を 推 定 時 刻 エ ラ ー (estimated time error) を 設 定 す る 。

ADJ_STATUS

buf.status を ク ロ ッ ク ス テ ー タ ス を 設 定 す る 。

ADJ_TIMECONST

buf.constant を PLL の 時 刻 定 数 を 設 定 す る 。 (下 記 の ) STA_NANO ス テ ー タ ス フ ラ グ が ク リ ア さ れ た 場 合 、 カ ー ネ ル は こ の 値 に 4 を 足 す 。

ADJ_SETOFFSET (Linux 2.6.29 以 降 )

buf.time を 現 在 時 刻 に 加 算 す る 。 buf.statusADJ_NANO フ ラ グ が 指 定 さ れ た 場 合 、 buf.time.tv_usec は ナ ノ 秒 と し て 解 釈 さ れ る 。 そ う で な い 場 合 は マ イ ク ロ 秒 と し て 解 釈 さ れ る 。

ADJ_MICRO (Linux 2.6.36 以 降 ) マ イ ク ロ 秒 単 位 の 精 度 を 選 択 す る 。
ADJ_NANO
(Linux 2.6.36 以 降 ) ナ ノ 秒 単 位 の 精 度 を 選 択 す る 。 ADJ_MICROADJ_NANO の 一 方 の み を 指 定 す る こ と 。
ADJ_TAI
(Linux 2.6.26 以 降 )

buf−>constant を TAI (Atomic International Time) オ フ セ ッ ト を 設 定 す る 。

ADJ_TAIADJ_TIMECONST と 組 み 合 わ せ て 使 わ な い こ と 。 ADJ_TIMECONSTbuf−>constant フ ィ ー ル ド 利 用 す る か ら で あ る 。

TAI の 詳 細 な 説 明 お よ び TAI と UTC の 違 い に つ い て は http://www.bipm.org/en/bipm/tai/tai.html">BIPM を 参 照 。

ADJ_TICK

buf.tick を tick 値 に 設 定 す る 。 上 記 の 代 わ り に 、 modes に 以 下 の 値 (複 数 ビ ッ ト の マ ス ク ) の い ず れ か を 指 定 す る こ と も で き る 。 こ の 場 合 は 他 の ビ ッ ト は modes に 指 定 す べ き で は な い 。

ADJ_OFFSET_SINGLESHOT 古 い 形 式 の adjtime(): 時 刻 を buf.offset で 指 定 さ れ た 値 で (徐 々 に ) 調 整 す る 。 buf.offset は マ イ ク ロ 秒 単 位 の 調 整 値 で あ る 。
ADJ_OFFSET_SS_READ
(Linux 2.6.28 以 降 で 機 能 す る )

ADJ_OFFSET_SINGLESHOT 操 作 を 行 っ た 後 で ま だ 残 っ て い る 調 整 す べ き 時 刻 量 を (buf.offset で ) 返 す 。 こ の 機 能 は Linux 2.6.24 で 追 加 さ れ た が 、 Linux 2.6.28 ま で は 正 常 に 動 作 し な か っ た 。 通 常 の ユ ー ザ ー は modes の 値 は 0 か ADJ_OFFSET_SS_READ の い ず れ か に 制 限 さ れ て い る 。 ス ー パ ー ユ ー ザ ー の み が 全 て の パ ラ メ ー タ ー を 設 定 で き る 。

buf.status フ ィ ー ル ド は ビ ッ ト マ ス ク で 、 こ の フ ィ ー ル ド を 使 っ て NTP 実 装 に 関 連 す る ス テ ー タ ス ビ ッ ト の 設 定 や 取 得 を 行 う こ と が で き る 。 マ ス ク の ビ ッ ト の い く つ か は 読 み 書 き 両 用 で 、 他 の ビ ッ ト は 読 み 出 し 専 用 で あ る 。
STA_PLL

Phase Locked Loop (PLL) の 更 新 を 有 効 に す る (読 み 書 き 両 用 )。 ADJ_OFFSET 経 由 で 設 定 で き る 。

STA_PPSFREQ

PPS freq discipline を 有 効 に す る (読 み 書 き 両 用 )

STA_PPSTIME

PPS time discipline を 有 効 に す る (読 み 書 き 両 用 )

STA_FLL

Frequency Locked Loop (FLL) モ ー ド を 選 択 す る (読 み 書 き 両 用 )

STA_INS 閏 秒 を 挿 入 す る (読 み 書 き 両 用 )
STA_DEL
閏 秒 を 削 除 す る (読 み 書 き 両 用 )
STA_UNSYNC
ク ロ ッ ク を 非 同 期 状 態 に す る (読 み 書 き 両 用 )
STA_FREQHOLD
周 波 数 を 保 持 す る (読 み 書 き 両 用 )
STA_PPSSIGNAL

PPS 信 号 が 存 在 す る (読 み 出 し 専 用 )

STA_PPSJITTER

PPS 信 号 の ジ ッ タ ー が 超 過 し て い る (読 み 出 し 専 用 )

STA_PPSWANDER

PPS 信 号 の wander が 超 過 し て い る (読 み 出 し 専 用 )

STA_PPSERROR

PPS 信 号 の 校 正 エ ラ ー (読 み 出 し 専 用 )

STA_CLOCKERR ク ロ ッ ク ハ ー ド ウ ェ ア 障 害 (読 み 出 し 専 用 )
STA_NANO
(Linux 2.6.26 以 降 ) 精 度 (0 = マ イ ク ロ 秒 、 1 = ナ ノ 秒 ; 読 み 出 し 専 用 )。 ADJ_NANO で セ ッ ト し 、 ADJ_MICRO で ク リ ア す る 。
STA_MODE
(Linux 2.6.26 以 降 ) モ ー ド (0 = Phase Locked Loop, 1 = Frequency Locked Loop; 読 み 出 し 専 用 )
STA_CLK
(Linux 2.6.26 以 降 ) ク ロ ッ ク 源 (0 = A, 1 = B; 読 み 出 し 専 用 )

status の 読 み 出 し 専 用 ビ ッ ト を 設 定 し よ う と し た 場 合 は 黙 っ て 無 視 さ れ る 。

返 り 値

成 功 し た 場 合 、 adjtimex() は ク ロ ッ ク の 状 態 、 つ ま り 、 以 下 の い ず れ か の 値 を 返 す 。

TIME_OK ク ロ ッ ク が 同 期 し て い る 。

TIME_INS 閏 秒 を 挿 入 し た 。

TIME_DEL 閏 秒 を 削 除 し た 。

TIME_OOP 閏 秒 が 処 理 中 で あ る 。

TIME_WAIT 閏 秒 が 発 生 し た 。

TIME_ERROR ク ロ ッ ク が 同 期 し て い な い 。 シ ン ボ ル 名

TIME_BAD

TIME_ERROR の 同 義 語 で あ り 、 過 去 互 換 性 の た め に 提 供 さ れ て い る 。 失 敗 し た 場 合 は adjtimex() は −1 を 返 し 、 errno が 設 定 さ れ る 。

エ ラ ー

EFAULT

buf が 書 き 込 み 可 能 な メ モ リ ー を 指 し て い な い 。

EINVAL

buf.offset へ −131071 〜 +131071 の 範 囲 以 外 の 値 を 設 定 し よ う と し た か 、 buf.status に 上 記 以 外 の 値 を 設 定 し よ う と し た か 、 buf.tick に 900000/HZ 〜 1100000/HZ の 範 囲 以 外 の 値 を 設 定 し よ う と し た 。 こ こ で HZ は シ ス テ ム の タ イ マ ー 割 り 込 み の 周 期 で あ る 。

EPERM

buf.modes が 0 で も ADJ_OFFSET_SS_READ で も な く 、 か つ 呼 び 出 し 元 が 十 分 な 特 権 を 持 っ て い な い 。 Linux で は CAP_SYS_TIME ケ ー パ ビ リ テ ィ が 必 要 で あ る 。

注 意

構 造 体 timex で は 、 freq, ppsfreq, stabil は 小 数 部 が 16 ビ ッ ト の ppm (parts per million) で あ る 。 つ ま り 、 こ れ ら の フ ィ ー ル ド の 値 1 は 2^−16 ppm で 、 2^16=65536 が 1 ppm で あ る 。 入 力 (freq の 場 合 ) で も 出 力 で も こ の 通 り で あ る 。

準 拠

adjtimex() は Linux 特 有 で あ り 、 移 植 を 意 図 し た プ ロ グ ラ ム で 使 用 す べ き で は な い 。 シ ス テ ム ク ロ ッ ク を 調 整 す る 方 法 で 、 移 植 性 が あ る が 自 由 度 は 劣 る 方 法 に つ い て は adjtime(3) を 参 照 の こ と 。

関 連 項 目

settimeofday(2), adjtime(3), capabilities(7), time(7), adjtimex(8)

こ の 文 書 に つ い て

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