Kā lietot gettimeofday funkciju C valodā?

How Use Gettimeofday Function C Language



The gettimeofday () funkcija iegūst sistēmas pulksteņa laiku. Pašreizējais laiks tiek izteikts pagājušajās sekundēs un mikrosekundēs kopš 00:00:00, 1970. gada 1. janvāra (Unix Epoch). Šajā rakstā mēs jums parādīsim, kā lietot gettimeofday () funkcija Linux. Tātad, sāksim.

Sintakse

intdienas sākums( struktūralaika valoda*pilsēta, struktūralaika zona*tz)

The gettimeofday () funkcija ir definēta sadaļā sys/laiks.h galvenes fails.







Argumenti

Šai funkcijai ir divi argumenti:



1starguments norāda uz laika valoda struktūra. The laika valoda struktūra ir deklarēta zemāk sys/laiks.h galvenes fails:



struktūralaika valoda{
laiks_t tv_sec; // lietots sekundes
suseconds_t tv_usec; // izmanto mikrosekundēm
}

Struktūras laika struktūra atspoguļo kalendāro laiku. Tajā ir divi locekļi:





  • tv_sec : Tas ir sekunžu skaits kopš laikmeta.
  • tv_usec : Tās ir papildu mikrosekundes pēc sekundes skaita aprēķina kopš laikmeta. .

2ndarguments norāda uz laika zona struktūra. Parasti tam jābūt iestatītam uz NULL, jo strukturēta laika josla ir novecojis. Šis arguments attiecas tikai uz savietojamību atpakaļ.

Atgriezt vērtības

Par panākumiem ,. gettimeofday () atgriezties 0, kļūmes gadījumā funkcija atgriež -1.



Vienkāršs laiks un drukāšana

#iekļaut
#iekļaut

intgalvenais() {
struktūratimeval current_time;
dienas sākums(&pašreizējais laiks,NULL);
printf ('sekundes: %ld nmikrosekundes: %ld ',
pašreizējais laiks.tv_sec,pašreizējais laiks.tv_usec);

atgriezties 0;
}

Izeja:

Šeit, sys/laiks.h ir iekļauts priekš gettimeofday () funkcija un laika struktūra. The gettimeofday () funkcija nosaka laiku timeval (current_time) struktūras dalībniekā. tv_sec ir neatņemamais sekunžu skaits, kas pagājis kopš sākuma UNIX laikmets , 1970. gada 1. janvāra pusnaktī UTC un tv_usec ir papildu mikrosekundes, kas pagājis no tv_sec. Palaižot programmu, jums vajadzētu redzēt rezultātu. Katru reizi, palaižot programmu, izlaide mainīsies.

NULL argumenta kļūda

#iekļaut
#iekļaut

intgalvenais() {

struktūratimeval current_time;
dienas sākums(NULL,NULL);
atgriezties 0;
}

Izeja:

Šajā piemērā parādīts pirmais arguments gettimeofday () funkcijai nevajadzētu būt NULL. Kompilācijas brīdinājums parādīsies, ja pirmais arguments ir NULL.

Pašreizējā laika formatēšanas piemērs

#iekļaut
#iekļaut
#iekļaut

intgalvenais() {
struktūratimeval tv;
laiks_t t;
struktūratm*info;
charbuferšķīdums[64];

dienas sākums(&tv,NULL);
t=tv.tv_sec;

info= vietējais laiks (&t);
printf ('%s', kā laiks (info));
strftime (buferšķīdums, izmērsbuferšķīdums, 'Šodien ir %A, %B %d. n',info);
printf ('%s',buferšķīdums);
strftime (buferšķīdums, izmērsbuferšķīdums, 'Laiks ir %I: %M %p. n',info);
printf ('%s',buferšķīdums);

atgriezties 0;
}

Izeja:

Šajā piemērā ir parādīts, kā drukāt datumu un laiku citā formātā. Nav ļoti viegli attēlot datumus no atgriešanās vērtības gettimeofday () funkciju. Šeit, vietējais laiks() un strftime () funkcijas tiek izmantotas, lai labi attēlotu atdeves vērtību gettimeofday () .

The vietējais laiks() funkcija ņem argumentu, kas ir atsauce uz rādītāju tv_sec lauks struktura laika valoda un atgriež atsauci uz a rādītāju struk tm objekts.

The strftime () funkcija ģenerēs personalizētu, formatētu virkni, kas parāda datumu un laiku no struk tm rādītājs. Formatētajam displejam tiek izmantoti formāta specifikatori. Piemēram, formāta virkne%d-%m-%Y%H:%M:%S norāda datumu un laiku šādā formā:

14.04.2020 13:09:42

Tālāk ir norādīti reklāmguvumu specifikatori, kurus var izmantot formatētam displejam.

Specifikators Nozīme
%līdz Nedēļas dienas saīsinātais nosaukums atbilstoši pašreizējai lokalizācijai.
%TO Nedēļas dienas nosaukums atbilstoši pašreizējai lokalizācijai.
% b Saīsinātā mēneša nosaukums atbilstoši pašreizējai lokalizācijai.
% B Pilna mēneša nosaukums atbilstoši pašreizējai lokalizācijai.
% c Vēlamais pašreizējās atrašanās vietas datuma un laika attēlojums.
%d Kā decimālskaitlis mēneša dienai (diapazons no 01 līdz 31).
%H Izmantojot 24 stundas (diapazons no 00 līdz 23) līdz stundai kā decimāldaļskaitli.
%Es Izmantojot decimālo skaitli 12 stundas (diapazons no 00 līdz 23) līdz stundai.
%j Kā decimālskaitlis gada dienai (diapazons 001-366).
%m Kā decimālskaitlis mēnesim (diapazons 01 - 12).
%M Minūtes decimālskaitlis.
%lpp Pamatojoties uz norādīto laika vērtību, “am” vai “pm” vai līdzvērtīgas virknes pašreizējai lokalizācijai.
%S Otrais cipars aiz komata.
% x Vēlamais pašreizējās lokalizācijas datuma attēlojums, bet bez laika.
% X Vēlamais pašreizējās lokalizācijas laika attēlojums, bet bez datuma.
%un Gads ir aiz komata, bet nav gadsimta (diapazons no 00 līdz 99).
%UN Gads ir decimālskaitlis, ieskaitot gadsimtu.
%AR Laika josla.

Programmas gettimeofday izmantošana programmas izpildes laika mērīšanai

#iekļaut
#iekļaut

intgalvenais() {

struktūralaika sākums,beigas;
dienas sākums(&sākt,NULL);

priekš (inti= 0;i<1e5 ;i++) {
}

dienas sākums(&beigas,NULL);
printf ('Laiks, kas nepieciešams, lai skaitītu līdz 10^5, ir: %ld mikrosekundes n',
((beigas.tv_sec * 1000000 +beigas.tv_usec) -
(sākt.tv_sec * 1000000 +sākt.tv_usec)));

atgriezties 0;
}

Izeja:

Šis piemērs parāda, kā gettimeofday () funkciju var izmantot, lai aprēķinātu programmas izpildes laiku.

Secinājums

Šādā veidā ,. gettimeofday () Šo funkciju var izmantot operētājsistēmā Linux. Lai pārnestu esošo kodu, gettimeofday () funkciju var izmantot, bet jaunajā kodā to nevajadzētu izmantot. clock_gettime () vietā var izmantot funkciju gettimeofday () .