C言語でgettimeofday関数を使用するにはどうすればよいですか?

How Use Gettimeofday Function C Language



NS gettimeofday() 関数はシステムの時刻を取得します。現在の時刻は、1970年1月1日00:00:00(Unixエポック)からの経過秒数とマイクロ秒数で表されます。この記事では、使用方法を紹介します gettimeofday() Linuxで機能します。それでは、始めましょう。

構文

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()