構文
intgettimeofday(( 構造体timeval*市、 構造体タイムゾーン*tz)。NS gettimeofday() 関数はで定義されています sys / time.h ヘッダーファイル。
引数
この関数は2つの引数を取ります。
1NS引数はを指します timeval 構造。 NS timeval 構造は以下のように宣言されています sys / time.h ヘッダーファイル:
構造体timeval{{
time_t tv_sec; //数秒間使用
suseconds_t tv_usec; //マイクロ秒に使用
}
struct timeval構造体は、カレンダー時間を表します。 2つのメンバーがあります。
- tv_sec :エポックからの秒数です。
- tv_usec :エポックからの秒数計算後、追加のマイクロ秒です。 。
2NS引数はを指します タイムゾーン 構造。通常はNULLに設定する必要があります。 構造体のタイムゾーン 廃止されました。この引数は、下位互換性のみを目的としています。
戻り値
成功すると、 gettimeofday() 0を返し、失敗した場合、関数は-1を返します。
簡単な時間と印刷の取得
#含む#含む
int主要(()。 {{
構造体timeval current_time;
gettimeofday((&現在の時刻、ヌル)。;
printf (('秒:%ldNSマイクロ秒:%ld '、
現在の時刻。tv_sec、現在の時刻。tv_usec)。;
戻る 0;
}
出力:
ここ、 sys / time.h に含まれています gettimeofday() 関数とtimeval構造。 NS gettimeofday() 関数は、timeval(current_time)構造体メンバーで時間を設定します。 tv_secは、開始から経過した整数秒数です。 UNIXエポック 、1970年1月1日のUTC午前0時、tv_usecは、tv_secから経過した追加のマイクロ秒数です。プログラムを実行すると、出力が表示されます。プログラムを実行するたびに、出力が変化します。
NULL引数エラー
#含む#含む
int主要(()。 {{
構造体timeval current_time;
gettimeofday((ヌル、ヌル)。;
戻る 0;
}
出力:
この例では、の最初の引数が gettimeofday() 関数はNULLであってはなりません。最初の引数がNULLの場合、コンパイルの警告が表示されます。
現在の時刻のフォーマットの例
#含む#含む
#含む
int主要(()。 {{
構造体タイムバルテレビ;
time_t t;
構造体tm*情報;
charバッファ[64];
gettimeofday((&テレビ、ヌル)。;
NS=テレビ。tv_sec;
情報= 現地時間 ((&NS)。;
printf (('%NS'、 asctime ((情報)。)。;
strftime ((バッファ、 のサイズバッファ、 '今日は%A、%B%dです。NS'、情報)。;
printf (('%NS'、バッファ)。;
strftime ((バッファ、 のサイズバッファ、 '時間は%I:%M%pです。NS'、情報)。;
printf (('%NS'、バッファ)。;
戻る 0;
}
出力:
この例では、日付と時刻を異なる形式で印刷する方法を示しています。の戻り値から日付を表すのは非常に簡単ではありません。 gettimeofday() 関数 。ここ、 現地時間() と strftime() 関数は、の戻り値を適切に表すために使用されます gettimeofday() 。
NS 現地時間() 関数は引数を取ります。これは、のポインタへの参照です。 tv_sec の分野 struct timeval そして、のポインタへの参照を返します struct tm 物体。
NS strftime() 関数は、からの日付と時刻を示す、パーソナライズされたフォーマット済みの文字列を生成します struct tm ポインタ。フォーマット指定子は、フォーマットされた表示に使用されます。たとえば、フォーマット文字列%d-%m-%Y%H:%M:%Sは、次の形式で日付と時刻を指定します。
04-14-2020 13:09:42以下は、フォーマットされた表示に使用できる変換指定子です。
指定子 | 意味 |
%に | 現在のロケールによる平日の省略名。 |
%に | 現在のロケールによる平日の名前。 |
% NS | 現在のロケールによる省略された月の名前。 |
% NS | 現在のロケールごとの1か月の名前。 |
% NS | 現在のロケールの日付と時刻の優先表現。 |
%NS | 月の日の10進数として(範囲01〜31)。 |
%NS | 10進数として24時間(範囲00〜23)から時間までを使用します。 |
%私 | 10進数として12時間(範囲00〜23)から時間までを使用します。 |
%NS | その年の日の10進数として(範囲001-366)。 |
%NS | 月の10進数として(範囲01〜12)。 |
%NS | 分の10進数。 |
%NS | 指定された時間値に基づいて、「am」または「pm」のいずれか、または現在のロケールの同等の文字列。 |
%NS | 秒の10進数。 |
% NS | 現在のロケールの日付の優先表現ですが、時間はありません。 |
% NS | 現在のロケールの時刻の優先表現ですが、日付はありません。 |
%と | 年は10進数ですが、世紀はありません(00〜99の範囲)。 |
%と | 年は世紀を含む10進数です。 |
%と | タイムゾーン。 |
プログラムの実行時間を測定するためにgettimeofdayを使用する
#含む#含む
int主要(()。 {{
構造体タイムバルブスタート、終わり;
gettimeofday((&始める、ヌル)。;
にとって ((int私= 0;私<1e5 ;私++)。 {{
}
gettimeofday((&終わり、ヌル)。;
printf (('10 ^ 5までカウントするのにかかる時間は次のとおりです:%ldマイクロ秒NS'、
((((終わり。tv_sec * 1000000 +終わり。tv_usec)。 -
((始める。tv_sec * 1000000 +始める。tv_usec)。)。)。;
戻る 0;
}
出力:
この例は、その方法を示しています gettimeofday() 関数は、プログラムの実行時間の計算に使用できます。
結論
このように、 gettimeofday() 関数はLinuxで使用される可能性があります。既存のコードを移植する場合、 gettimeofday() 関数を使用することはできますが、新しいコードでは使用しないでください。 clock_gettime() 代わりに関数を使用できます gettimeofday() 。