CLOCK_GETTIME(2)

名称
clock_gettime, clock_settime, clock_getres - 日付と時刻の取得/設定/精度の取得をする

ライブラリ
libc

書式
<sys/time.h> int clock_gettime(clockid_t clock_id, struct timespec *tp) int clock_settime(clockid_t clock_id, const struct timespec *tp) int clock_getres(clockid_t clock_id, struct timespec *tp)

解説
clock_gettime() と clock_settime() は clock_id で指定するクロックの値を取得、設定します。

clock_id には、次の 3 つの値のうちの 1 つを指定します。 CLOCK_REALTIME は普通の時計のように進む時間、 CLOCK_VIRTUAL は呼び出しプロセスのために CPU がユーザモードで 実行されているときにだけ進む時間、 CLOCK_PROF は、CPU がユーザモードまたはカーネルモードで実行されている ときに進む時間です。

tp によって指される構造体は <sys/time.h> 内で次のように定義されています。

    struct timespec {
    	time_t	tv_sec;		/* 秒 */
    	long	tv_nsec;	/* ナノ秒 */
    };

時刻を設定できるのはスーパーユーザだけです。 システムの安全性レベル (securelevel) が 1 より大きい場合 (init(8) を参照)、 時間は進めることだけができます。この制限は、 悪意のあるスーパーユーザがファイルに 任意のタイムスタンプを設定するのを防止するためのものです。 しかし、システムが安全なモードの時でも、 adjtime(2) システムコールを使用すれば システム時間を遅らせることができてしまいます。

クロックの精度 (細かさ) は、 clock_getres() 呼び出しによって返されます。この値は、 (非 NULL ポインタ) *tp 内に格納されます。

戻り値

エラー
次のエラーコードが errno に設定されます。

[EINVAL]
    clock_id が有効な値ではありませんでした。

[EFAULT]
    *tp 引数アドレスが無効なメモリを参照しています。

[EPERM]
    スーパユーザ以外のユーザが時刻を設定しようとしました。

関連項目
date(1), adjtime(2), ctime(3), timed(8) etc. clock_gettime() 等の関数は p1003.1b-93 に準拠しています。