名 前
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.status に ADJ_NANO フ ラ グ が 指 定 さ れ た 場 合 、 buf.time.tv_usec は ナ ノ 秒 と し て 解 釈 さ れ る 。 そ う で な い 場 合 は マ イ ク ロ 秒 と し て 解 釈 さ れ る 。
ADJ_MICRO (Linux 2.6.36
以 降 ) マ イ ク ロ
秒 単 位 の 精 度
を 選 択 す る 。
ADJ_NANO (Linux 2.6.36 以 降 ) ナ
ノ 秒 単 位 の 精
度 を 選 択 す る
。 ADJ_MICRO と ADJ_NANO の
一 方 の み を 指
定 す る こ と 。
ADJ_TAI (Linux 2.6.26 以 降 )
buf−>constant を TAI (Atomic International Time) オ フ セ ッ ト を 設 定 す る 。
ADJ_TAI は ADJ_TIMECONST と 組 み 合 わ せ て 使 わ な い こ と 。 ADJ_TIMECONST も buf−>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/ に 書 か れ て い る 。