NTP_ADJTIME(2)

名称
ntp_adjtime - NTP デーモンアプリケーションインタフェース

書式
<sys/types.h> <sys/timex.h> int ntp_adjtime(struct timex *tp)

解説
ntp_adjtime() システムコールは Network Time Protocol (ネットワークタイムプロトコル) デーモン ntpd(8) のためのカーネルインタフェースとして使用されます。 timex 構造体の特定のフィールドは、 status ワードの STA_NANO ビットの状態に従って、マイクロ秒またはナノ秒に変換されます。

FreeBSD カーネルの中では、 ntp_adjtime() および ntp_gettime(2) システムコールはどちらの分解能を使用するかを決定するために、または もう一方を選択するために、いつでも使用することが可能です。 選択された分解能は、 ntp_gettime() および ntp_adjtime() システムコールの中の特定のフィールドのスケーリングに影響を及ぼします。

この API は非常に複雑で、状態があることに注意してください。 ユーザは、はじめに ntpd(8) のソースを徹底的に吟味することなしに、修正を試みるべきではありません。

    /*
     * NTP デーモンインタフェース (ntp_adjtime()) - CPU クロック発振器の
     * 制御規約と状態の決定のために使用されます。
     *
     * 注意: offset, precision および jitter メンバは STA_NANO が 0 であれば
     * マイクロ秒で、そうでなければナノ秒です。
     */
    struct timex {
    	unsigned int modes;	/* クロックモードビット (wo) */
    	long	offset;		/* 時刻オフセット (ns/us) (rw) */
    	long	freq;		/* 周波数オフセット (PPM 単位) (rw) */
    	long	maxerror;	/* 最大誤差 (us) (rw) */
    	long	esterror;	/* 推定誤差 (us) (rw) */
    	int	status;		/* クロック状態ビット (rw) */
    	long	constant;	/* ポール間隔 (log2 s) (rw) */
    	long	precision;	/* 時刻の精度 (ns/us) (ro) */
    	long	tolerance;	/* クロック周波数の公差 (PPM 単位) (ro) */
    	/*
    	 * 以下の読み取り専用の構造体メンバは、カーネル内に PPS
    	 * シグナル制御規約がコンフィギュレーションされている場合のみ
    	 * 実装されます。これらはポータビリティを保証するために、全ての
    	 * コンフィギュレーションに含まれます。
    	 */
    	long	ppsfreq;	/* PPS 周波数 (PPM 単位) (ro) */
    	long	jitter;		/* PPS ジッタ (ns/us) (ro) */
    	int	shift;		/* 存続期間 (s) (シフト) (ro) */
    	long	stabil;		/* PPS 安定性 (PPM 単位) (ro) */
    	long	jitcnt;		/* 超過したジッタ制限 (ro) */
    	long	calcnt;		/* 測定間隔 (ro) */
    	long	errcnt;		/* 測定誤差 (ro) */
    	long	stbcnt;		/* 超過した安定性制限 (ro) */
    };

成功して完了したときには、 ntp_adjtime() は tp 引数に現在のクロックの状態を入れます。

戻り値
成功時には完了したクロック状態が返されます。 そうでなければ、-1 が返されグローバル変数 errno がそのエラーを示すために設定されます。

起こりうるクロックの状態は以下のとおりです:

TIME_OK
    全てが OK で、閏秒の警告もありません。
TIME_INS
    閏秒挿入の警告です。
TIME_DEL
    閏秒削除の警告です。
TIME_OOP
    閏秒の経過中です。
TIME_WAIT
    閏秒が発生しました。
TIME_ERROR
    クロックが同期していません。

エラー
ntp_gettime() システムコールは、呼び出し側が十分なパーミションを持っていない場合に、 EPERM を返すことがあります。

関連項目
ntp_gettime(2), ntpd(8)

作者
このマニュアルページは Tom Rhodes <trhodes@FreeBSD.org> が書きました。