GETTIMEOFDAY(2)

名称
gettimeofday, settimeofday - 日付と時刻の取得 / 設定

ライブラリ
libc

書式
<sys/time.h> int gettimeofday(struct timeval *tp, struct timezone *tzp) int settimeofday(const struct timeval *tp, const struct timezone *tzp)

解説
注記: timezone はもはや使用されません。 この情報はカーネルの外側に保持されます。

システムが保持している現在のグリニッジ時刻と現在の時間帯は gettimeofday() システムコールから得られ、 settimeofday() システムコールで設定されます。 時刻は 1970 年 1 月 1 日の深夜 (0 時) からの秒数とマイクロ秒数で表現されます。 システムクロックの分解能はハードウェアで決まり、 時刻は継続的または “チック” 単位で更新されます。 tp または tzp が NULL の場合、対応する時刻情報は返されず、また設定されません。

tp と tzp の指す構造体は <sys/time.h> 内に次のように定義されています:

    struct timeval {
    	long	tv_sec;		/* 1970 年 1 月 1 日からの秒数 */
    	long	tv_usec;	/* およびマイクロ秒数 */
    };
    struct timezone {
    	int	tz_minuteswest; /* グリニッジから西方向への偏差 */
    	int	tz_dsttime;	/* 夏時間補正のタイプ */
    };

timezone 構造体は、ローカル時間帯 (グリニッジから西向きに分単位で測定) と フラグを含みます。 フラグが 0 でない場合は、1 年の適切な時期に 夏時間がその地域に適用されることを示します。

スーパユーザだけが時刻または時間帯を設定できます。 システムが securelevel >= 2 (init(8) を参照) で実行される場合は、 最大 1 秒のみ時刻を進めるか遅らせることしかできません。 この制限が課されるのは、悪意のあるスーパユーザがファイルに任意の タイムスタンプを設定するのを防止するためです。 システム時刻は、システムが安全モードにあっても adjtime(2) システムコールを使用して制限なしに後方に調整できます。

戻り値

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

[EFAULT]
    引数アドレスが無効なメモリを参照しました。

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

関連項目
date(1), adjtime(2), clock_gettime(2), ctime(3), timeradd(3), clocks(7), timed(8)

歴史
gettimeofday() システムコールは 4.2BSD ではじめて登場しました。