Available in

(2) (3) (2)/es (2)/fr (2)/ja (2)/ko (2)/nl

Contents

名 前

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 の 場 合 、 対 応 す る 構 造 体 の 設 定 /取 得 は 行 わ れ な い 。

timezone 構 造 体 を 使 う の は 時 代 遅 れ (obsolete) で あ る : tz 引 き 数 は 通 常 は NULL に 指 定 す べ き で あ る 。 tz_dsttime フ ィ ー ル ド は Linux で は 一 切 使 わ れ て こ な か っ た ; libc や glibc で も サ ポ ー ト さ れ て こ な か っ た し 、 こ れ か ら も サ ポ ー ト さ れ る こ と は な い 。 カ ー ネ ル の ソ ー ス 中 の 宣 言 以 外 で 、 こ の フ ィ ー ル ド が 存 在 す る の は 全 て バ グ で あ る 。 よ っ て こ れ 以 降 の 記 述 は 、 純 粋 に 歴 史 的 興 味 に 基 づ い た も の で あ る 。

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 に す る べ き で あ る 。

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

timeval 構 造 体 を 操 作 す る た め の マ ク ロ の 説 明 は timeradd(3) に あ る 。

返 り 値

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) の 使 用 が 推 奨 さ れ て い る 。

注 意

昔 は struct timeval の フ ィ ー ル ド は long 型 で あ っ た 。

関 連 項 目

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

COMMENTS

blog comments powered by Disqus