Manpages

名 前

gettimeofday, settimeofday − 時 刻 を 取 得 /設 定 す る

書 式

#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

int settimeofday(const struct timeval *tv, const struct timezone *tz);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

settimeofday(): _BSD_SOURCE

説 明

関 数 gettimeofday() と settimeofday() は 時 刻 と タ イ ム ゾ ー ン を 取 得 ま た は 設 定 す る 。 tv 引 き 数 は struct timeval で あ る (<sys/time.h> で 定 義 さ れ て い る ):

struct timeval {
time_t tv_sec; /* 秒 */
suseconds_t tv_usec; /* マ イ ク ロ 秒 */ }; こ れ に よ り 紀 元 (the Epoch: time(2) を 参 照 ) か ら の 秒 と マ イ ク ロ 秒 が 取 得 で き る 。 tz 引 き 数 は struct timezone で あ る :

struct timezone {
int tz_minuteswest; /* グ リ ニ ッ ジ 標 準 時 と の 差 (西 方 に 分 単 位 ) */
int tz_dsttime; /* 夏 時 間 調 整 の 型 */ };

tvtz が NULL の 場 合 、 対 応 す る 構 造 体 の 設 定 /取 得 は 行 わ れ な い (た だ し 、 tv が NULL の 場 合 に は 、 コ ン パ イ ル 時 の 警 告 が 発 生 す る )。

timezone 構 造 体 の 利 用 は 廃 止 予 定 と さ れ て い る ; 通 常 は tz 引 き 数 に NULL を 指 定 す べ き で あ る (下 記 の 「 注 意 」 を 参 照 )。

Linux で は 、 settimeofday() シ ス テ ム コ ー ル に 関 連 し て 、 独 特 の 「 ク ロ ッ ク の ズ レ (warp clock)」 が 存 在 す る 場 合 が あ る 。 こ れ は (ブ ー ト 後 の ) 最 初 の 呼 び 出 し で tz 引 き 数 が NULL で な く 、 tv 引 き 数 が NULL で tz_minuteswest フ ィ ー ル ド が 0 で な い 場 合 に 起 こ る (こ の 場 合 tz_dsttime フ ィ ー ル ド は 0 に す べ き で あ る )。 こ の よ う な 場 合 、 settimeofday() は CMOS ク ロ ッ ク が 地 方 時 (local time) で あ り 、 UTC シ ス テ ム 時 間 を 得 る た め に は 、 tz_minuteswest の 分 だ け 増 加 さ せ な く て は な ら な い と み な し て し ま う 。 疑 い も な く 、 こ の 機 構 を 使 う こ と は 良 い 考 え で は な い 。

返 り 値

gettimeofday() と settimeofday() は 成 功 す る と 0 を 返 し 、 失 敗 し た 場 合 は −1 を 返 す (こ の 場 合 は errno が 適 切 に 設 定 さ れ る )。

エ ラ ー

EFAULT

tvtz の ど ち ら か が ア ク セ ス 可 能 な ア ド レ ス 空 間 外 を 指 し て い る 。

EINVAL

タ イ ム ゾ ー ン (ま た は 他 の 何 か ) が 不 正 で あ る 。

EPERM 呼 び 出 し 元 プ ロ

セ ス に settimeofday() を 呼 び 出 す た め の 十 分 な 特 権 が な い 。 Linux で は CAP_SYS_TIME ケ ー パ ビ リ テ ィ (capability) が 必 要 で あ る 。

準 拠

SVr4, 4.3BSD に 準 拠 す る 。 POSIX.1−2001 は gettimeofday() に つ い て は 記 述 し て い る が 、 settimeofday() に つ い て は 記 述 し て い な い 。 POSIX.1−2008 で は gettimeofday() は 廃 止 予 定 と さ れ て お り 、 代 わ り に clock_gettime(2) の 使 用 が 推 奨 さ れ て い る 。

注 意

gettimeofday() が 返 す 時 刻 は 、 シ ス テ ム 時 間 の 不 連 続 な 変 化 (例 え ば 、 シ ス テ ム 管 理 者 が シ ス テ ム 時 間 を 手 動 で 変 更 し た 場 合 な ど ) の 影 響 を 受 け る 。 単 調 増 加 す る ク ロ ッ ク が 必 要 な 場 合 は 、 clock_gettime(2) を 参 照 し て ほ し い 。

timeval 構 造 体 を 操 作 す る た め の マ ク ロ の 説 明 は timeradd(3) に あ る 。 昔 は struct timeval の フ ィ ー ル ド は long 型 で あ っ た 。

tz_dsttime は Linux で こ れ ま で 使 わ れ た こ と は な い 。 し た が っ て 、 以 下 は 純 粋 に 歴 史 的 な 興 味 か ら 書 か れ た も の で あ る 。

tz_dsttime フ ィ ー ル ド に は (下 記 に 示 す ) シ ン ボ ル 定 数 が 格 納 さ れ る 。 こ れ は 一 年 の う ち で い つ 夏 時 間 (Daylight Savings Time) を 実 施 す る か を 示 し て い る (注 意 : そ の 値 は 年 間 を 通 し た 定 数 で あ る : 夏 時 間 が 実 施 中 で あ る こ と を 示 す わ け で は な く 、 ア ル ゴ リ ズ ム を 選 択 し て い る だ け で あ る )。 夏 時 間 は 以 下 の よ う に 定 義 さ れ る :

DST_NONE /* 夏 時 間 を 採 用 し て い な い */
DST_USA
/* ア メ リ カ 合 衆 国 式 夏 時 間 */
DST_AUST
/* オ ー ス ト ラ リ ア 式 夏 時 間 */
DST_WET
/* 西 ヨ ー ロ ッ パ 式 夏 時 間 */
DST_MET
/* 中 央 ヨ ー ロ ッ パ 式 夏 時 間 */
DST_EET
/* 東 ヨ ー ロ ッ パ 式 夏 時 間 */
DST_CAN
/* カ ナ ダ */
DST_GB
/* グ レ ー ト ブ リ テ ン お よ び ア イ ル ラ ン ド */
DST_RUM
/* ル ー マ ニ ア */
DST_TUR
/* ト ル コ */
DST_AUSTALT
/* 1986年 に 移 行 さ れ た オ ー ス ト ラ リ ア 式 */ 当 然 の こ と な が ら 、 夏 時 間 が ど の 期 間 に 実 施 さ れ る か を 国 ご と の 簡 単 な ア ル ゴ リ ズ ム で 導 く こ と が で き な い こ と が 判 明 し た 。 実 際 、 夏 時 間 の 期 間 は 予 測 不 可 能 な 政 治 的 決 定 で 決 定 さ れ る 。 そ の た め 、 こ の 方 法 で タ イ ム ゾ ー ン を 表 す こ と は 断 念 さ れ た 。 Linux に お い て settimeofday() を 呼 び 出 す と き は 、 tz_dsttime フ ィ ー ル ド を 0 に す る べ き で あ る 。

関 連 項 目

date(1), adjtimex(2), clock_gettime(2), time(2), ctime(3), ftime(3), timeradd(3), capabilities(7), time(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。