Wie verwende ich die gettimeofday-Funktion in der Sprache C?

How Use Gettimeofday Function C Language



Die gettimeofday() Funktion ruft die Uhrzeit des Systems ab. Die aktuelle Zeit wird in verstrichenen Sekunden und Mikrosekunden seit 00:00:00, 1. Januar 1970 (Unix-Epoche) ausgedrückt. In diesem Artikel zeigen wir Ihnen, wie Sie die gettimeofday() Funktion unter Linux. Also lasst uns anfangen.

Syntax

intGettimeofday( strukturierenZeitwert*Stadt, strukturierenZeitzone*tz)

Die gettimeofday() Funktion ist definiert in sys/time.h Header-Datei.







Argumente

Diese Funktion benötigt zwei Argumente:



Die 1NSArgument weist auf die Zeitwert Struktur. Die Zeitwert Struktur wird wie folgt deklariert in sys/time.h Header-Datei :



strukturierenZeitwert{
time_t tv_sec; // Sekunden lang verwendet
suseconds_t tv_usec; // für Mikrosekunden verwendet
}

Die Struktur struct timeval repräsentiert eine Kalenderzeit. Es hat zwei Mitglieder:





  • tv_sec : Dies ist die Anzahl der Sekunden seit der Epoche.
  • tv_usec :Es sind zusätzliche Mikrosekunden nach der Sekundenberechnung seit der Epoche. .

Die 2ndArgument weist auf die Zeitzone Struktur. Es sollte normalerweise auf NULL gesetzt werden, weil Zeitzone strukturieren ist obsolet. Dieses Argument dient nur der Abwärtskompatibilität.

Rückgabewerte

Bei Erfolg, die gettimeofday() 0 zurückgeben, bei einem Fehler gibt die Funktion -1 zurück.



Einfach Zeit abrufen und drucken

#enthalten
#enthalten

inthauptsächlich() {
strukturierentimeval current_time;
Gettimeofday(&aktuelle Uhrzeit,NULL);
druckenf ('Sekunden: %ld Mikrosekunden : %ld',
aktuelle Uhrzeit.tv_sec,aktuelle Uhrzeit.tv_usec);

Rückkehr 0;
}

Ausgabe:

Hier, sys/time.h wurde aufgenommen für gettimeofday() Funktion und Zeitstruktur. Die gettimeofday() Funktion setzt die Zeit im timeval (current_time) Strukturmember. tv_sec ist die ganzzahlige Anzahl von Sekunden, die seit dem Start des UNIX-Epoche , um Mitternacht UTC am 1. Januar 1970 und tv_usec ist die zusätzliche Anzahl von Mikrosekunden, die seit tv_sec verstrichen sind. Wenn Sie das Programm ausführen, sollten Sie die Ausgabe sehen. Jedes Mal, wenn Sie das Programm ausführen, ändert sich die Ausgabe.

NULL-Argumentfehler

#enthalten
#enthalten

inthauptsächlich() {

strukturierentimeval current_time;
Gettimeofday(NULL,NULL);
Rückkehr 0;
}

Ausgabe:

In diesem Beispiel zeigt das erste Argument der gettimeofday() Die Funktion sollte nicht NULL sein. Eine Kompilierungswarnung wird ausgegeben, wenn das erste Argument NULL ist.

Beispiel für die Formatierung der aktuellen Uhrzeit

#enthalten
#enthalten
#enthalten

inthauptsächlich() {
strukturierenZeitfernsehen;
time_t t;
strukturierentm*die Info;
verkohlenPuffer[64];

Gettimeofday(&Fernseher,NULL);
T=Fernseher.tv_sec;

die Info= Ortszeit (&T);
druckenf ('%S', asctime (die Info));
strftime (Puffer, Größe vonPuffer, 'Heute ist %A, %B %d. ',die Info);
druckenf ('%S',Puffer);
strftime (Puffer, Größe vonPuffer, 'Die Zeit ist %I:%M %p. ',die Info);
druckenf ('%S',Puffer);

Rückkehr 0;
}

Ausgabe:

In diesem Beispiel wird gezeigt, wie Datum und Uhrzeit in verschiedenen Formaten gedruckt werden. Es ist nicht ganz einfach, Daten aus dem Rückgabewert von . darzustellen gettimeofday() Funktion. Hier, Ortszeit() und strftime() Funktionen werden verwendet, um den Rückgabewert von . schön darzustellen gettimeofday() .

Die Ortszeit() Die Funktion nimmt ein Argument an, das eine Referenz auf einen Zeiger der . ist tv_sec Bereich Zeitwert strukturieren und gibt eine Referenz auf einen Zeiger von a . zurück strukturiere tm Objekt.

Die strftime() generiert eine personalisierte, formatierte Zeichenfolge, die Datum und Uhrzeit des strukturiere tm Zeiger. Formatbezeichner werden für die formatierte Anzeige verwendet. Die Formatzeichenfolge %d-%m-%Y %H:%M:%S gibt beispielsweise Datum und Uhrzeit in dieser Form an:

14.04.2020 13:09:42

Im Folgenden sind die Konvertierungsspezifizierer aufgeführt, die für die formatierte Anzeige verwendet werden können:

Bezeichner Bedeutung
%zu Der abgekürzte Name des Wochentags gemäß dem aktuellen Gebietsschema.
%ZU Der Name des Wochentags gemäß dem aktuellen Gebietsschema.
% B Name des abgekürzten Monats gemäß dem aktuellen Gebietsschema.
% B Name des vollen Monats gemäß dem aktuellen Gebietsschema.
% C Die bevorzugte Darstellung von Datum und Uhrzeit für das aktuelle Gebietsschema.
%D Als Dezimalzahl für den Monatstag (Bereich 01 – 31).
%H Verwenden von 24-Stunden (Bereich 00 – 23) auf die Stunde als Dezimalzahl.
%ICH Verwenden von 12-Stunden (Bereich 00 – 23) auf die Stunde als Dezimalzahl.
%J Als Dezimalzahl für den Tag des Jahres (Bereich 001-366).
%m Als Dezimalzahl für den Monat (Bereich 01 – 12).
%M Die Dezimalzahl der Minute.
%P Basierend auf dem angegebenen Zeitwert entweder „am“ oder „pm“ oder die entsprechenden Zeichenfolgen für das aktuelle Gebietsschema.
%S Die Dezimalzahl der Sekunde.
% x Bevorzugte Darstellung des Datums für das aktuelle Gebietsschema, jedoch ohne Uhrzeit.
% X Bevorzugte Darstellung der Uhrzeit für das aktuelle Gebietsschema, jedoch ohne Datum.
%und Das Jahr ist dezimal, aber kein Jahrhundert (Bereich von 00 – 99).
%UND Das Jahr ist dezimal einschließlich Jahrhundert.
%MIT Die Zeitzone.

Verwenden von gettimeofday, um die Programmausführungszeit zu messen

#enthalten
#enthalten

inthauptsächlich() {

strukturierenUhrzeit Start,Ende;
Gettimeofday(&Anfang,NULL);

zum (intich= 0;ich<1e5 ;ich++) {
}

Gettimeofday(&Ende,NULL);
druckenf ('Zählzeit bis 10^5 beträgt: %ld Mikrosekunden ',
((Ende.tv_sec * 1000000 +Ende.tv_usec) -
(Anfang.tv_sec * 1000000 +Anfang.tv_usec)));

Rückkehr 0;
}

Ausgabe:

Dieses Beispiel zeigt, wie gettimeofday() Funktion kann zur Berechnung der Ausführungszeit eines Programms verwendet werden.

Abschluss

Auf diese Weise wird die gettimeofday() -Funktion könnte unter Linux verwendet werden. Für die Portierung von bestehendem Code ist die gettimeofday() -Funktion kann verwendet werden, aber in neuem Code sollte sie nicht verwendet werden. clock_gettime() Funktion kann anstelle von verwendet werden gettimeofday() .