EN JA
CLOCK_GETTIME(2)
CLOCK_GETTIME(2) FreeBSD System Calls Manual CLOCK_GETTIME(2)

名称

clock_gettime, clock_settime, clock_getres日付と時刻の取得/設定/測定する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < 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 引数は、次の値の 1 つを指定できます: CLOCK_REALTIME, CLOCK_REALTIME_PRECISE, CLOCK_REALTIME_FAST は、普通の時計のように進む時間です。 CLOCK_MONOTONIC, CLOCK_MONOTONIC_PRECISE, CLOCK_MONOTONIC_FAST は、SI 単位系の秒で進む時間です。 CLOCK_UPTIME, CLOCK_UPTIME_PRECISE, CLOCK_UPTIME_FAST は、カーネルがブートするとき、0 から始まり、マシンが実行されている間に、SI 秒単位で単調に増加します。 CLOCK_VIRTUAL は、呼び出しプロセスのために CPU がユーザモードで実行されているときにだけ進む時間です。 CLOCK_PROF は、CPU がユーザモードまたはカーネルモードで実行されているときに進む時間です。または、 CLOCK_SECOND は、現在の秒の値をキャッシュしたカーネルで使用して、フルタイムカウンタ問い合わせを実行せずに現在の秒を返します。

クロック ID CLOCK_REALTIME_FAST, CLOCK_MONOTONIC_FAST, CLOCK_UPTIME_FAST は、_FAST 接尾辞のない対応する ID の類似物ですが、フルタイムカウンタ問い合わせを実行しないので、それらの精度は、1 タイマ tick (刻) です。同様に、 CLOCK_REALTIME_PRECISE, CLOCK_MONOTONIC_PRECISE, CLOCK_UPTIME_PRECISE は、実行時間を犠牲にして、可能なかぎり最も正確な値を得るために使用されます。

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

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

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

クロックの精度 (細かさ) は、 clock_getres() システムコールによって返されます。この値は、(非 NULL ポインタ) *tp 内に格納されます。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

次のエラーコードが errno に設定されます:
[ EINVAL]
clock_id 引数が有効な値ではありませんでした。
[ EFAULT]
*tp 引数アドレスが無効なメモリを参照しています。
[ EPERM]
スーパユーザ以外のユーザが時刻を設定しようとしました。

規格

clock_gettime(), clock_settime() と clock_getres() システムコールは、 IEEE Std 1003.1b-1993 (“POSIX.1b”) に適合しています。クロック ID CLOCK_REALTIME_FAST, CLOCK_REALTIME_PRECISE, CLOCK_MONOTONIC_FAST, CLOCK_MONOTONIC_PRECISE, CLOCK_UPTIME, CLOCK_UPTIME_FAST, CLOCK_UPTIME_PRECISE, CLOCK_SECOND は、POSIX インタフェースのための FreeBSD 拡張です。
December 29, 2009 FreeBSD