Cum se utilizează funcția gettimeofday în limbajul C?

How Use Gettimeofday Function C Language



The gettimeofday () funcția primește ora ceasului sistemului. Ora curentă este exprimată în secunde și microsecunde trecute de la 00:00:00, 1 ianuarie 1970 (Epoca Unix). În acest articol, vă vom arăta cum să utilizați gettimeofday () funcționează în Linux. Deci sa începem.

Sintaxă

intgettimeofday( structtimeval*oraș, structfus orar*tz)

The gettimeofday () funcția este definită în sys / time.h fișier antet.







Argumente

Această funcție ia două argumente:



1Sfargumentul indică spre timeval structura. The timeval structura este declarată ca mai jos în sys / time.h fișier antet:



structtimeval{
time_t tv_sec; // folosit pentru secunde
suseconds_t tv_usec; // folosit pentru microsecunde
}

Structura structurală temporală reprezintă un timp calendaristic. Are doi membri:





  • tv_sec : Este numărul de secunde de la epocă.
  • tv_usec : Este vorba de microsecunde suplimentare după calculul numărului de secunde de la epocă. .

Cele 2ndargumentul indică spre fus orar structura. În mod normal, ar trebui setat la NULL deoarece struct fusul orar este învechit. Acest argument este doar pentru compatibilitatea înapoi.

Returnează valorile

La succes, gettimeofday () returnează 0, pentru eșec funcția returnează -1.



Obțineți simplu timp și imprimați

#include
#include

intprincipal() {
structtimeval current_time;
gettimeofday(&ora curentă,NUL);
printf ('secunde:% ld nmicro secunde:% ld ',
ora curentă.tv_sec,ora curentă.tv_usec);

întoarcere 0;
}

Ieșire:

Aici, sys / time.h a fost inclus pentru gettimeofday () funcția și structura temporală. The gettimeofday () funcția setează timpul în membrul structurii timeval (current_time). tv_sec este numărul integral de secunde trecute de la începutul programului Epoca UNIX , la miezul nopții UTC la 1 ianuarie 1970 și tv_usec este un număr suplimentar de microsecunde scurs de la tv_sec. Dacă rulați programul, ar trebui să vedeți rezultatul. De fiecare dată când rulați programul, ieșirea se va schimba.

Eroare argument NULL

#include
#include

intprincipal() {

structtimeval current_time;
gettimeofday(NUL,NUL);
întoarcere 0;
}

Ieșire:

În acest exemplu arată primul argument al gettimeofday () funcția nu trebuie să fie NULL. Avertismentul de compilare va apărea dacă primul argument este NULL.

Formatare Exemplu de timp curent

#include
#include
#include

intprincipal() {
structtimeval tv;
timp_t t;
structtm*info;
chartampon[64];

gettimeofday(&televizor,NUL);
t=televizor.tv_sec;

info= ora locala (&t);
printf („% s”, la timp (info));
strftime (tampon, mărimeatampon, „Astăzi este% A,% B% d. n',info);
printf („% s”,tampon);
strftime (tampon, mărimeatampon, „Timpul este% I:% M% p. n',info);
printf („% s”,tampon);

întoarcere 0;
}

Ieșire:

În acest exemplu, se arată cum se tipărește data și ora în format diferit. Nu este foarte ușor să reprezentați date din valoarea returnată a gettimeofday () funcție. Aici, ora locala() și strftime () funcțiile sunt utilizate pentru a reprezenta frumos valoarea returnată a gettimeofday () .

The ora locala() funcția ia un argument, care este o referință la un indicator al tv_sec câmp de struct timeval și returnează o referință la un pointer al unui struct tm obiect.

The strftime () funcția va genera un șir personalizat, formatat, care arată data și ora din struct tm indicator. Specificatorii de format sunt utilizați pentru afișarea formatată. De exemplu, șirul de format% d-% m-% Y% H:% M:% S specifică data și ora în acest formular:

14.04.2020 13:09:42

Următoarele sunt specificațiile de conversie, care pot fi utilizate pentru afișarea formatată:

Specificator Sens
%la Denumirea prescurtată a zilei săptămânii conform localității actuale.
%LA Numele zilei săptămânii conform localității actuale.
% b Numele lunii abreviate conform localităților actuale.
% B Numele lunii întregi conform localităților actuale.
% c Reprezentarea preferată a datei și orei pentru regiunea actuală.
% d Ca număr zecimal pentru ziua lunii (intervalul 01 - 31).
% H Folosind 24 de ore (interval 00 - 23) până la oră ca număr zecimal.
% Eu Folosind 12 ore (interval 00 - 23) până la oră ca număr zecimal.
% j Ca număr zecimal pentru ziua anului (interval 001-366).
% m Ca număr zecimal pentru lună (interval 01 - 12).
% M Numărul zecimal al minutului.
% p Pe baza valorii de timp specificate, fie „am”, fie „pm” sau șirurile echivalente pentru locale curente.
% S Numărul zecimal al celui de-al doilea.
% X Reprezentare preferată a datei pentru locația curentă, dar fără timp.
% X Reprezentare preferată a orei pentru regiunea curentă, dar fără dată.
%și Anul este zecimal, dar nu are secol (variază de la 00 la 99).
%ȘI Anul este zecimal, inclusiv secolul.
%CU Fusul orar.

Folosind gettimeofday pentru a măsura timpul de execuție a programului

#include
#include

intprincipal() {

structînceput de timp,Sfârșit;
gettimeofday(&start,NUL);

pentru (inteu= 0;eu<1e5 ;eu++) {
}

gettimeofday(&Sfârșit,NUL);
printf ('Timpul necesar pentru a fi numărat până la 10 ^ 5 este:% ld micro secunde n',
((Sfârșit.tv_sec * 1000000 +Sfârșit.tv_usec) -
(start.tv_sec * 1000000 +start.tv_usec)));

întoarcere 0;
}

Ieșire:

Acest exemplu arată că cum gettimeofday () funcția poate fi utilizată pentru calcularea timpului de execuție al unui program.

Concluzie

În acest fel, gettimeofday () funcția ar putea fi utilizată în Linux. Pentru portarea codului existent, gettimeofday () funcția poate fi utilizată, dar în codul nou nu ar trebui folosită. clock_gettime () funcția poate fi utilizată în loc de gettimeofday () .