Comment utiliser la fonction gettimeofday en langage C ?

How Use Gettimeofday Function C Language



Les gettimeofday() la fonction obtient l'heure de l'horloge du système. L'heure actuelle est exprimée en secondes et microsecondes écoulées depuis 00:00:00, le 1er janvier 1970 (Unix Epoch). Dans cet article, nous allons vous montrer comment utiliser le gettimeofday() fonction sous Linux. Alors, commençons.

Syntaxe

entierobtenir l'heure du jour( structureintervalle de temps*ville, structurefuseau horaire*tz)

Les gettimeofday() la fonction est définie dans sys/heure.h En tête de fichier.







Arguments

Cette fonction prend deux arguments :



Le 1stl'argument pointe vers le intervalle de temps structure. Les intervalle de temps la structure est déclarée comme ci-dessous dans sys/heure.h En tête de fichier :



structureintervalle de temps{
time_t tv_sec; //utilisé pendant des secondes
suseconds_t tv_usec; //utilisé pour les microsecondes
}

La structure struct timeval représente une heure calendaire. Il compte deux membres :





  • tv_sec : C'est le nombre de secondes depuis l'époque.
  • tv_usec :Ce sont des microsecondes supplémentaires après le calcul du nombre de secondes depuis l'époque. .

Les deuxsdl'argument pointe vers le fuseau horaire structure. Il devrait normalement être défini sur NULL car fuseau horaire de structure est obsolète. Cet argument est uniquement destiné à la compatibilité descendante.

Valeurs de retour

En cas de succès, le gettimeofday() renvoie 0, en cas d'échec la fonction renvoie -1.



Obtenez du temps et imprimez simplement

#comprendre
#comprendre

entierprincipale() {
structuretimeval current_time;
obtenir l'heure du jour(&heure actuelle,NUL);
imprimer ('secondes : %ld micro secondes : %ld',
heure actuelle.tv_sec,heure actuelle.tv_usec);

revenir 0;
}

Sortir:

Ici, sys/heure.h a été inclus pour gettimeofday() fonction et structure temporelle. Les gettimeofday() La fonction définit l'heure dans le membre de la structure timeval (current_time). tv_sec est le nombre entier de secondes écoulées depuis le début de la Epoque UNIX , à minuit UTC le 1er janvier 1970 et tv_usec est le nombre supplémentaire de microsecondes écoulées depuis tv_sec. Si vous exécutez le programme, vous devriez voir la sortie. Chaque fois que vous exécutez le programme, la sortie change.

Erreur d'argument NULL

#comprendre
#comprendre

entierprincipale() {

structuretimeval current_time;
obtenir l'heure du jour(NUL,NUL);
revenir 0;
}

Sortir:

Dans cet exemple montre que le premier argument de la gettimeofday() la fonction ne doit pas être NULL. Un avertissement de compilation viendra si le premier argument est NULL.

Exemple de formatage de l'heure actuelle

#comprendre
#comprendre
#comprendre

entierprincipale() {
structuretélévision temporelle;
temps_t t;
structuretm*Info;
carboniseramortir[64];

obtenir l'heure du jour(&la télé,NUL);
t=la télé.tv_sec;

Info= heure locale (&t);
imprimer ('%s', asctime (Info));
strftime (amortir, taille deamortir, 'Aujourd'hui c'est %A, %B %d. ',Info);
imprimer ('%s',amortir);
strftime (amortir, taille deamortir, 'L'heure est %I:%M %p. ',Info);
imprimer ('%s',amortir);

revenir 0;
}

Sortir:

Dans cet exemple montre comment imprimer la date et l'heure dans un format différent. Il n'est pas très facile de représenter les dates à partir de la valeur de retour de gettimeofday() fonction . Ici, heure locale() et strftime() les fonctions sont utilisées pour bien représenter la valeur de retour de gettimeofday() .

Les heure locale() fonction prend un argument, qui est une référence à un pointeur de la tv_sec domaine de struct timeval et renvoie une référence à un pointeur d'un structure tm objet.

Les strftime() La fonction générera une chaîne formatée personnalisée indiquant la date et l'heure à partir du structure tm aiguille. Les spécificateurs de format sont utilisés pour l'affichage formaté. Par exemple, la chaîne de format %d-%m-%Y %H:%M:%S spécifie la date et l'heure sous cette forme :

14-04-2020 13:09:42

Voici les spécificateurs de conversion pouvant être utilisés pour l'affichage formaté :

Spécificateur Sens
Le nom abrégé du jour de la semaine selon les paramètres régionaux actuels.
Le nom du jour de la semaine selon les paramètres régionaux actuels.
% b Nom du mois abrégé selon les paramètres régionaux actuels.
% B Nom du mois complet selon les paramètres régionaux actuels.
%c La représentation préférée de la date et de l'heure pour les paramètres régionaux actuels.
%ré Sous forme de nombre décimal pour le jour du mois (plage 01 – 31).
%H Utilisation de 24 heures (plage 00 – 23) à l'heure comme nombre décimal.
%JE Utilisation de 12 heures (plage 00 – 23) à l'heure comme nombre décimal.
%j Sous forme de nombre décimal pour le jour de l'année (plage 001-366).
%m Sous forme de nombre décimal pour le mois (plage 01 – 12).
%M Le nombre décimal de la minute.
%p En fonction de la valeur d'heure spécifiée, soit « am » ou « pm » ou les chaînes équivalentes pour les paramètres régionaux actuels.
%S Le nombre décimal de la seconde.
% X Représentation préférée de la date pour les paramètres régionaux actuels, mais sans heure.
% X Représentation préférée de l'heure pour les paramètres régionaux actuels, mais sans date.
%et L'année est décimale mais pas de siècle (plage de 00 à 99).
%ET L'année est décimale, y compris le siècle.
%AVEC Le fuseau horaire.

Utilisation de gettimeofday pour mesurer le temps d'exécution du programme

#comprendre
#comprendre

entierprincipale() {

structuredébut de l'intervalle de temps,finir;
obtenir l'heure du jour(&début,NUL);

pour (entierje= 0;je<1e5 ;je++) {
}

obtenir l'heure du jour(&finir,NUL);
imprimer ('Le temps nécessaire pour compter jusqu'à 10^5 est : %ld micro secondes ',
((finir.tv_sec * 1000000 +finir.tv_usec) -
(début.tv_sec * 1000000 +début.tv_usec)));

revenir 0;
}

Sortir:

Cet exemple montre que comment gettimeofday() La fonction peut être utilisée pour le calcul du temps d'exécution d'un programme.

Conclusion

De cette façon, le gettimeofday() fonction peut être utilisée sous Linux. Pour le portage de code existant, le gettimeofday() La fonction peut être utilisée mais dans le nouveau code, elle ne doit pas être utilisée. clock_gettime() la fonction peut être utilisée à la place de gettimeofday() .