Hogyan kell használni a gettimeofday függvényt C nyelven?

How Use Gettimeofday Function C Language



Az gettimeofday () funkció megkapja a rendszer óráját. Az aktuális időt 1970. január 1 -jén 00:00:00 (Unix Epoch) óta eltelt másodpercekben és mikroszekundumokban fejezik ki. Ebben a cikkben megmutatjuk, hogyan kell használni gettimeofday () funkció Linuxon. Szóval, kezdjük.

Szintaxis

intnap kezdete( strukidőtartam*város, strukidőzóna*tz)

Az gettimeofday () funkció definiálva van sys/time.h fejléc fájl.







Érvek

Ez a függvény két érvet tartalmaz:



Az 1utcaérv arra mutat időtartam szerkezet. Az időtartam szerkezetét az alábbiak szerint deklarálják sys/time.h fejléc fájl:



strukidőtartam{
time_t tv_sec; // másodpercig használt
suseconds_t tv_usec; // mikroszekundumokra használják
}

A szerkezet időbeli szerkezete naptári időt jelent. Két tagja van:





  • tv_sec : Ez a korszak óta eltelt másodpercek száma.
  • tv_usec : Ez további mikroszekundum a korszak óta eltelt másodpercek számítása után. .

A 2ndérv arra mutat időzóna szerkezet. Általában NULL értékre kell állítani, mert struktúra időzóna elavult. Ez az érv csak a visszafelé való kompatibilitásról szól.

Visszaadja az értékeket

A sikerről a gettimeofday () return 0, hiba esetén a függvény -1 -et ad vissza.



Egyszerű idő és nyomtatás

#befoglalni
#befoglalni

intfő-() {
struktimeval current_time;
nap kezdete(&aktuális idő,NULLA);
printf ('másodperc: %ld nmikroszekundumok: %ld ',
aktuális idő.tv_sec,aktuális idő.tv_usec);

Visszatérés 0;
}

Kimenet:

Itt, sys/time.h tartalmazza gettimeofday () funkció és időbeli szerkezet. Az gettimeofday () függvény beállítja az időt a timeval (current_time) struktúra tagjában. A tv_sec a kezdete óta eltelt másodpercek integrált száma UNIX korszak , 1970. január 1 -én éjfélkor (UTC) és a tv_usec további mikroszekundumok teltek el a tv_sec időponttól. Ha futtatja a programot, látnia kell a kimenetet. Minden alkalommal, amikor futtatja a programot, a kimenet változik.

NULL érvhiba

#befoglalni
#befoglalni

intfő-() {

struktimeval current_time;
nap kezdete(NULLA,NULLA);
Visszatérés 0;
}

Kimenet:

Ebben a példában az első argumentuma látható gettimeofday () függvény nem lehet NULL. A fordítási figyelmeztetés akkor jelenik meg, ha az első argumentum NULL.

Példa az aktuális idő formázására

#befoglalni
#befoglalni
#befoglalni

intfő-() {
struktimeval tv;
time_t t;
struktm*info;
charpuffer[64];

nap kezdete(&tévé,NULLA);
t=tévé.tv_sec;

info= helyi idő (&t);
printf ('%s', asctime (info));
strftime (puffer, méretepuffer, 'Ma %A, %B %d van. n',info);
printf ('%s',puffer);
strftime (puffer, méretepuffer, 'Az idő %I: %M %p. n',info);
printf ('%s',puffer);

Visszatérés 0;
}

Kimenet:

Ebben a példában bemutatjuk, hogyan lehet különböző formátumban nyomtatni a dátumot és az időt. Nem túl könnyű a dátumokat a (z) visszatérési értékéből ábrázolni gettimeofday () funkciót. Itt, helyi idő() és strftime () függvények segítségével szépen ábrázolja a visszatérési értékét gettimeofday () .

Az helyi idő() függvény egy argumentumot vesz fel, amely hivatkozás a mutatóra tv_sec mezője strukture timeval és egy hivatkozást ad vissza az a mutatójára struk tm tárgy.

Az strftime () függvény egy személyre szabott, formázott karakterláncot generál, amely a dátumot és az időt mutatja struk tm mutató. A formátummeghatározókat a formázott megjelenítéshez használják. Például a formátum karakterlánc%d-%m-%Y%H:%M:%S a dátumot és az időt adja meg ebben a formában:

2020. 04. 14. 13:09:42

Az alábbiakban a konverziós specifikátorok használhatók a formázott megjelenítéshez:

Specifikátor Jelentése
%nak nek A hét napja rövidített neve a jelenlegi területi beállítás szerint.
%NAK NEK A hét napja neve a jelenlegi terület szerint.
% b A jelenlegi hely szerinti rövidített hónap neve.
% B A teljes hónap neve a jelenlegi terület szerint.
% c A dátum és az idő preferált ábrázolása a jelenlegi területi beállításhoz.
%d Tizedes számként a hónap napjára (01-31 tartomány).
%H A 24 óra (00-23 tartomány) és az óra közötti tizedes szám használatával.
%ÉN Használja a 12 órát (00-23 tartomány) az óra tizedes számként.
%j Tizedes számként az év napjára (001-366 tartomány).
%m A hónap tizedes számaként (01-12).
%M A perc tizedes száma.
%p A megadott időérték alapján vagy „am” vagy „pm”, vagy az aktuális területi beállításokkal egyenértékű karakterláncok.
%S A másodperc tizedes száma.
% x Az aktuális terület dátumának preferált megjelenítése, de idő nélkül.
% X Az aktuális terület megfelelő időpontjának preferált ábrázolása, de dátum nélkül.
%és Az év tizedes, de nincs évszázad (00 és 99 között).
%ÉS Az év tizedes, beleértve a századot is.
%VAL VEL Az időzóna.

A gettimeofday használata a program végrehajtási idejének mérésére

#befoglalni
#befoglalni

intfő-() {

struktimeval start,vége;
nap kezdete(&Rajt,NULLA);

számára (intén= 0;én<1e5 ;én++) {
}

nap kezdete(&vége,NULLA);
printf ('A 10^5 -ig történő számláláshoz szükséges idő: %ld mikroszekundum n',
((vége.tv_sec * 1000000 +vége.tv_usec) -
(Rajt.tv_sec * 1000000 +Rajt.tv_usec)));

Visszatérés 0;
}

Kimenet:

Ez a példa azt mutatja, hogy hogyan gettimeofday () függvény használható egy program végrehajtási idejének kiszámításához.

Következtetés

Ily módon a gettimeofday () funkció használható Linux alatt. A meglévő kód átviteléhez a gettimeofday () funkció használható, de az új kódban nem szabad használni. clock_gettime () funkció helyett használható gettimeofday () .