Comment utiliser la fonction gettimeofday dans le langage C?

Comment utiliser la fonction gettimeofday dans le langage C?
Le getTimeOfday () La fonction obtient le temps d'horloge du système. L'heure actuelle est exprimée en secondes et microsecondes écoulées depuis 00:00:00, 1er janvier 1970 (Unix Epoch). Dans cet article, nous allons vous montrer comment utiliser le getTimeOfday () fonction dans Linux. Alors, commençons.

Syntaxe

int gettimeofday (struct timeval * tp, struct horonozone * tz)

Le getTimeOfday () La fonction est définie dans sys / temps.H En tête de fichier.

Arguments

Cette fonction prend deux arguments:

Le 1St L'argument pointe vers le compteur temporel structure. Le compteur temporel la structure est déclarée comme ci-dessous dans sys / temps.H En tête de fichier :

struct timeval
time_t tv_sec; // utilisé pendant quelques secondes
SUSECONDS_T TV_USEC; // utilisé pour les microsecondes

La structure Struct TimeVal représente un temps de calendrier. Il a deux membres:

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

Les deuxnd L'argument pointe vers le fuseau horaire structure. Il doit normalement être défini sur null car fuseau horaire de structure est obsolète. Cet argument concerne la compatibilité en arrière uniquement.

Valeurs de retour

Sur le succès, le getTimeOfday () retour 0, pour l'échec la fonction renvoie -1.

Simple Get Time and Imprimer

#inclure
#inclure
int main()
struct timeval current_time;
getTimeOfday (& current_time, null);
printf ("secondes:% ld \ nmicro secondes:% ld",
heure actuelle.tv_sec, current_time.tv_usec);
retour 0;

Sortir:

Ici, sys / temps.H a été inclus pour getTimeOfday () fonction et structure temporelle. Le getTimeOfday () fonction définit le membre de la structure TimeVal (current_time). TV_SEC est le nombre intégral de secondes écoulées depuis le début du Unix Epoch, sur Midnight UTC le 1er janvier 1970 et TV_USEC est un nombre supplémentaire de microsecondes écoulées à partir de TV_SEC. Si vous exécutez le programme, vous devriez voir la sortie. Chaque fois que vous exécutez le programme, la sortie changera.

Erreur d'argument nul

#inclure
#inclure
int main()
struct timeval current_time;
getTimeofday (null, null);
retour 0;

Sortir:

Dans cet exemple montre que le premier argument du getTimeOfday () La fonction ne doit pas être nul. Un avertissement de compilation viendra si le premier argument est nul.

Formatage Exemple d'heure actuelle

#inclure
#inclure
#inclure
int main()
Struct TimeVal TV;
time_t t;
struct tm * info;
tampon char [64];
getTimeofday (& tv, null);
T = TV.tv_sec;
info = localtime (& t);
printf ("% s", asctime (info));
stftime (tampon, taille de tampon, "aujourd'hui est% a,% b% d.\ n ", info);
printf ("% s", tampon);
stftime (tampon, taille de tampon, "le temps est% i:% m% p.\ n ", info);
printf ("% s", tampon);
retour 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 de la valeur de retour de getTimeOfday () fonction . Ici, heure locale() et strftime () Les fonctions sont utilisées pour représenter bien la valeur de retour de getTimeOfday ().

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

Le strftime () La fonction générera une chaîne formatée personnalisée montrant la date et l'heure struct 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 de cette forme:

14-04-2020 13:09:42

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

Spécificateur Signification
%un Le nom abrégé de la semaine selon le lieu actuel.
%UN Le nom de la semaine selon les paramètres régionaux actuels.
% b Nom du mois abrégé selon le lieu actuel.
% B Nom du mois complet selon les paramètres locaux actuels.
% c La représentation préférée de la date et de l'heure pour les paramètres locaux actuels.
%d Comme un numéro décimal pour le jour du mois (plage 01 - 31).
% H Utilisation de 24 heures (plage 00 - 23) à l'heure comme numéro décimal.
%JE Utilisation de 12 heures (plage 00 - 23) à l'heure comme numéro décimal.
% J Comme un numéro décimal pour le jour de l'année (plage 001-366).
% m Comme un numéro décimal pour le mois (plage 01 - 12).
% M Le nombre décimal de la minute.
% p Sur la base de la valeur temporelle spécifiée, «AM» ou «PM» ou les chaînes équivalentes pour le lieu actuel.
% 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 temps.
%X Représentation préférée du temps pour les paramètres régionaux actuels, mais sans date.
% y L'année est décimale mais pas de siècle (varie de 00 à 99).
% Y L'année est décimale, y compris le siècle.
% Z Le fuseau horaire.

Utilisation de GetTimeOfday afin de mesurer le temps d'exécution du programme

#inclure
#inclure
int main()
Struct TimeVal Start, End;
getTimeOfday (& start, null);
pour (int i = 0; i <1e5 ; i++)

getTimeOfday (& end, null);
printf ("le temps pris pour compter à 10 ^ 5 est:% ld micro secondes \ n",
((fin.tv_sec * 1000000 + fin.tv_usec) -
(commencer.tv_sec * 1000000 + démarrer.tv_usec)));
retour 0;

Sortir:

Cet exemple montre 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 () La fonction peut être utilisée dans Linux. Pour le portage du code existant, le getTimeOfday () La fonction peut être utilisée mais dans le nouveau code, il ne doit pas être utilisé. Clock_gettime () La fonction peut être utilisée au lieu de getTimeOfday ().