Unix-system-calls-gettimeofday

提供:Dev Guides
移動先:案内検索

[top]#

|http://www.google.com/[Google] | a|

Web This Site
  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

[cols=",,,,,,,",]

| |  Home   | |  References   | |  Discussion Forums   | |  About TP  

[width="100%",cols="100%",]

a| == gettimeofday()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

gettimeofday、settimeofday-時間の取得/設定

概要

  • #include <sys/time.h> *
  • int gettimeofday(struct timeval * tv 、struct timezone *tz ); * * int settimeofday(const struct timeval * tv 、const struct timezone *tz ); *

説明

関数 gettimeofday ()および settimeofday ()は、時間とタイムゾーンを取得および設定できます。 tv_引数は_struct timeval(_ <sys/time.h> _で指定されている)です:

struct timeval { time_t tv_sec; /*seconds*/ suseconds_t tv_usec; /*microseconds*/ };

また、エポック以降の秒数とマイクロ秒数を示します( time (2)を参照)。 _tz_引数は_struct timezone_です:

struct timezone { int tz_minuteswest; /*minutes west of Greenwich*/ int tz_dsttime; /*type of DST correction*/ };

_tv_または_tz_がNULLの場合、対応する構造は設定または返されません。

_timezone_構造体の使用は廃止されました。 _tz_引数は通常、NULLとして指定する必要があります。 _tz_dsttime_フィールドはLinuxでは使用されていません。 libcまたはglibcではサポートされていませんし、サポートされません。 (宣言以外の)カーネルソース内のこのフィールドのすべての出現はバグです。 したがって、以下は純粋に歴史的な関心事です。

フィールド_tz_dsttime_には、夏時間が有効な年のどの部分を示すシンボリック定数(以下に値を示します)が含まれています。 (注:その値は年間を通じて一定です。DSTが有効であることを示すものではなく、アルゴリズムを選択するだけです。)定義されている夏時間アルゴリズムは次のとおりです。

*DST_NONE*/* dstにはありません */* DST_USA */* USAスタイルのdst */* DST_AUST */* オーストラリアスタイルのdst */* DST_WET */* 西ヨーロッパのdst */* DST_MET */* 中央ヨーロッパのdst */* DST_EET */* 東ヨーロッパ夏時間 */* DST_CAN */* カナダ */* DST_GB */* 英国とアイルランド */* DST_RUM */* ルーマニア */* DST_TUR */* トルコ */* DST_AUSTALT */* 1986年にシフトしたオーストラリアスタイル*/

もちろん、夏時間が有効な期間は、国ごとに1つの単純なアルゴリズムでは指定できないことが判明しました。実際、この期間は予測不可能な政治的決定によって決定されます。 そのため、タイムゾーンを表すこの方法は廃止されました。 Linuxでは、 settimeofday ()の呼び出しで、_tz_dsttime_フィールドはゼロでなければなりません。

Linuxでは、最初の呼び出し(起動後)でNULL以外の_tz_引数があり、_tv_引数がNULLで、_tz_minuteswest_フィールドが次の場合、 settimeofday ()システムコールに関連付けられたいくつかの独特の「ワープクロック」セマンティクスがありますゼロ以外。 このような場合、CMOSクロックは現地時間にあり、UTCシステム時間を取得するためにこの量だけインクリメントする必要があると想定されています。 この機能を使用するのは悪い考えです。

次のマクロは、_struct timeval_で動作するように定義されています。

#define timerisset(tvp)\    ((tvp)->tv_sec

(tvp)→tv_usec) #define timercmp(tvp, uvp, cmp)\

((tvp)→tv_sec cmp (uvp)→tv_sec

\ (tvp)→tv_sec == (uvp)→tv_sec &&\ (tvp)→tv_usec cmp (uvp)→tv_usec)

  1. define timerclear(tvp)\    ((tvp)→tv_sec = (tvp)→tv_usec = 0) …​.

返り値

*gettimeofday* ()および *settimeofday* ()は、成功の場合は0、失敗の場合は-1を返します(この場合、_errno_が適切に設定されます)。

エラー

Tag Description
EFAULT One of tv or tz pointed outside the accessible address space.
EINVAL Timezone (or something else) is invalid.
*EPERM * The calling process has insufficient privilege to call* settimeofday*(); under Linux the CAP_SYS_TIME capability is required.

NOTE

*settimeofday* ()のプロトタイプと *timercmp* 、 *timerisset* 、 *timerclear* 、 *timeradd* 、 *timersub* の定義は(glibc2.2.2以降) *_BSD_SOURCE* が定義されている場合にのみ利用可能です。

伝統的に、_struct timeval_のフィールドは長かった。

準拠

SVr4、4.3BSD。 POSIX.1-2001は gettimeofday ()について説明していますが、 settimeofday ()については説明していません。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

|  

[cols="^",]

|Advertisements