C Programmation

Comment utiliser la fonction gettimeofday en langage C?

Comment utiliser la fonction gettimeofday en langage C?
le gettimeofday() la fonction obtient l'heure 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

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

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

Arguments

Cette fonction prend deux arguments :

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

struct    timeval  
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 :

Les deuxsd l'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

#inclure
#inclure
int main()
struct timeval current_time;
gettimeofday(¤t_time, NULL);
printf("secondes : %ld\nmicro secondes : %ld",
heure actuelle.tv_sec, current_time.tv_usec);
renvoie 0 ;

Production:

Ici, sys/heure.h a été inclus pour gettimeofday() fonction et structure temporelle. le 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 changera.

Erreur d'argument NULL

#inclure
#inclure
int main()
 
struct timeval current_time;
gettimeofday(NULL, NULL);
renvoie 0 ;

Production:

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

#inclure
#inclure
#inclure
int main()
struct timeval tv;
temps_t t;
struct tm *info;
tampon de caractères[64] ;
 
gettimeofday(&tv, NULL);
t = télévision.tv_sec;
info = heure locale(&t);
printf("%s",asctime (info));
strftime (buffer, sizeof buffer, "Aujourd'hui est %A, %B %d.\n", infos);
printf("%s",buffer);
strftime (buffer, sizeof buffer, "Le temps est %I:%M %p.\n", infos);
printf("%s",buffer);
renvoie 0 ;

Production:

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() une fonction . Ici, heure locale() et strftime() les fonctions sont utilisées pour bien représenter la valeur de retour de gettimeofday().

le 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.

le 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
%une Le nom abrégé du jour de la semaine selon l'actuelle locale.
%UNE Le nom du jour de la semaine selon l'actuelle locale.
%b Nom du mois abrégé selon la locale actuelle.
%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 Basé sur la valeur de temps 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 la locale actuelle, mais sans heure.
%X Représentation préférée de l'heure pour la locale actuelle, mais sans date.
%y L'année est décimale mais pas de siècle (plage de 00 à 99).
%A L'année est décimale, y compris le siècle.
%Z Le fuseau horaire.

Utilisation de gettimeofday pour 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 nécessaire pour compter jusqu'à 10^5 est : %ld micro secondes\n",
((finir.tv_sec * 1000000 + fin.tv_usec) -
(démarrer.tv_sec * 1000000 + démarrage.tv_usec)));
renvoie 0 ;

Production:

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

SuperTuxKart pour Linux
SuperTuxKart est un excellent titre conçu pour vous apporter l'expérience Mario Kart gratuitement sur votre système Linux. C'est assez stimulant et am...
Tutoriel Bataille pour Wesnoth
The Battle for Wesnoth est l'un des jeux de stratégie open source les plus populaires auxquels vous pouvez jouer en ce moment. Non seulement ce jeu es...
0 A.ré. Didacticiel
Sur les nombreux jeux de stratégie disponibles, 0 A.ré. parvient à se démarquer comme un titre complet et un jeu tactique très profond bien qu'il soit...