man 2 gettimeofday翻訳

3198 ワード

名前


gettimeofday, settimeofday - get/set time

概要

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

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

glibcに必要なフィーチャーテストマクロ(feature_test_macros(7)):
settimeofday():
    Since glibc 2.19:
        _DEFAULT_SOURCE
    Glibc 2.19 and earlier:
        _BSD_SOURCE

説明


関数gettimeofday()とsettimeofday()は、時間とタイムゾーンを取得または設定できます.tvパラメータはstruct timeval(で定義):
struct timeval {
    time_t      tv_sec;    /* seconds */
    suseconds_t tv_usec;   /* microseconds */ 
};

さらに、Epochから現在までの時間が何秒、何ミリ秒であるかを示します(time(2)).tzパラメータはstruct timezoneです.
struct timezone {
    int tz_minuteswest;    /* minutes west of Greenwich */
    int tz_dsttime;        /* type of DST correction */
};

tvとtzのうちの1つがNULLである場合、対応する構造は設定または戻りません.(ただし、tvがNULLの場合はコンパイル警告が発生します.)
timezone構造の使用は廃棄されず、tzパラメータは一般にNULLを使用する(以下の注釈を参照).
Linuxの下で、起動後にsettimeofday()が最初に呼び出された場合、パラメータtzはNULLではなく、tvはNULLであり、tz_minuteswestがゼロでないと(ここのtz_dsttimeは0のはず)、時計の意味を歪めることがあります.この場合、CMOSクロックはローカル時間であり、UTCシステム時間を得るために一定数の時間を要すると仮定する.このような特性を使うのは間違いなく悪い考えです.

戻り値


gettimeofday()とsettimeofday()は成功したときに0を返し、失敗したときに-1を返します(errnoも設定します).

エラー


EFAULT tvまたはtzはアクセスできないメモリ領域を指す
EINVAL Timezone無効
EPERM呼び出しプロセスにはsettimeofday()を呼び出す権限がありません.現在のLinuxにはCAP_が必要ですSYS_TIME機能.

きかく


SVr4, 4.3BSD. POSIX.1−2001はgettimeofday()を記述するがsettimeofday()は記述しない.POSIX.1-2008 gettimeofday()を廃棄とマークします.clock_の使用を推奨get-time(2).

コメント


gettimeofday()が返す時間は、システム管理者がシステム時間を人為的に変更したなど、システム時間の不連続なジャンプの影響を受けます.単調に成長する時計がほしいならclock_を見てくださいgettime(2).
timeradd(3)は、timeval構造を動作するマクロを記述する.
従来、struct timevalのフィールドのタイプはlongです.
C library/kernel差
一部のシステムアーキテクチャでは、vdso(7)はgettimeofday()の実装を提供する.
tz_dsttimeフィールド
Linuxカーネルではありませんがglibcを使用しています.現在のタイムゾーンにdaylight savingルールが設定されている場合、gettimeofday()はstruct timezoneのtz_をdsttimeフィールドはゼロ以外の値に設定されます.これでは、daylight(3)と同じ意味になります.Linuxの上にglibcのgettimeofday()とsettimeofday()のtz_dsttimeは永遠に使えない.だから以下の説明は、歴史を述べるためだけです.
古いシステムでは、フィールドtz_dsttimeには、1年間のDaylight Saving Timeが使用されるタイミングを示す記号定数(以下に示す)が含まれています.(注意:この値は年間定数であり、DSTが使用されるわけではありません.アルゴリズムを選択するというだけです).DSTアルゴリズムは以下の通りである.
DST_NONE     /* not on DST */
DST_USA      /* USA style DST */
DST_AUST     /* Australian style DST */
DST_WET      /* Western European DST */
DST_MET      /* Middle European DST */
DST_CAN      /* Canada */
DST_GB       /* Great Britain and Eire */
DST_RUM      /* Romania */
DST_TUR      /* Turkey */
DST_AUSTALT  /* Australian style with shift in 1986 */

もちろんいつDSTを使うかは簡単なアルゴリズムで決まるのではなく、一つの国で決まるわけではありません.実際、この時点は予測できない政治的決定の影響を受けている.そのため、このようなタイムゾーンを表す方法は廃棄されています.

リファレンス


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

著作権


このページはLinux 4.15 man-pagesプロジェクトの一部です.プロジェクトの説明、bugs関連情報の報告、およびこのページの最新バージョンはすべてhttps://www.kernel.org/doc/man-pages/見つけます.