名 前
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; /* 夏 時 間 調
整 の 型 */ };
tv や tz が 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 |
tv か tz の ど ち ら か が ア ク セ ス 可 能 な ア ド レ ス 空 間 外 を 指 し て い る 。
タ イ ム ゾ ー ン (ま た は 他 の 何 か ) が 不 正 で あ る 。 セ ス に 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
/* 夏 時 間 を 採 用
し て い な い */ 関 連 項 目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/ に 書 か れ て い る 。 |