C dilinde gettimeofday işlevi nasıl kullanılır?

How Use Gettimeofday Function C Language



NS gettimeofday() işlev, sistemin saat zamanını alır. Geçerli zaman, 1 Ocak 1970 (Unix Epoch) 00:00:00'dan bu yana geçen saniye ve mikrosaniye cinsinden ifade edilir. Bu yazımızda size nasıl kullanılacağını göstereceğiz. gettimeofday() Linux'ta işlev. Öyleyse başlayalım.

Sözdizimi

intgettimeofday( yapızaman aralığı*Kent, yapısaat dilimi*tz)

NS gettimeofday() fonksiyon tanımlıdır sistem/zaman.h başlık dosyası.







Argümanlar

Bu işlev iki argüman alır:



1NSargüman işaret ediyor zaman aralığı yapı. NS zaman aralığı yapı aşağıdaki gibi bildirilir sistem/zaman.h başlık dosyası :



yapızaman aralığı{
time_t tv_sec; // saniye için kullanılır
susaniye_t tv_usec; //mikrosaniye için kullanılır
}

struct timeval yapısı bir takvim zamanını temsil eder. İki üyesi vardır:





  • tv_sn : Dönemden bu yana geçen saniye sayısıdır.
  • tv_usec :Epoch'tan bu yana saniye sayısı hesaplamasından sonraki ek mikrosaniyedir. .

2ndargüman işaret ediyor saat dilimi yapı. Normalde NULL olarak ayarlanmalıdır çünkü yapı zaman dilimi eski. Bu argüman yalnızca geriye dönük uyumluluk içindir.

Dönüş değerleri

Başarı üzerine, gettimeofday() 0 döndürür, başarısızlık durumunda işlev -1 döndürür.



Basit Zaman Alma ve Yazdırma

#Dahil etmek
#Dahil etmek

intana() {
yapızaman aralığı current_time;
gettimeofday(&şimdiki zaman,BOŞ);
baskı ('saniye : %ld mikro saniye : %ld',
şimdiki zaman.tv_sn,şimdiki zaman.tv_usec);

dönüş 0;
}

Çıktı:

Buraya, sistem/zaman.h için dahil edildi gettimeofday() fonksiyon ve zamansal yapı. NS gettimeofday() işlev zamanı timeval (current_time) yapı üyesinde ayarlar. tv_sec, programın başlangıcından bu yana geçen tam saniye sayısıdır. UNIX dönemi , 1 Ocak 1970 UTC gece yarısı ve tv_usec, tv_sec'den geçen ek mikrosaniye sayısıdır. Programı çalıştırırsanız çıktıyı görmelisiniz. Programı her çalıştırdığınızda çıktı değişecektir.

NULL Argüman Hatası

#Dahil etmek
#Dahil etmek

intana() {

yapızaman aralığı current_time;
gettimeofday(BOŞ,BOŞ);
dönüş 0;
}

Çıktı:

Bu örnekte, ilk argümanın gettimeofday() işlev NULL olmamalıdır. İlk argüman NULL ise derleme uyarısı gelecektir.

Geçerli Saati Biçimlendirme Örneği

#Dahil etmek
#Dahil etmek
#Dahil etmek

intana() {
yapızaman aralığı tv;
zaman_t t;
yapıtm*bilgi;
karaktertampon[64];

gettimeofday(&televizyon,BOŞ);
T=televizyon.tv_sn;

bilgi= localtime (&T);
baskı ('%s', artış zamanı (bilgi));
strftime (tampon, boyututampon, 'Bugün %A, %B %d. ',bilgi);
baskı ('%s',tampon);
strftime (tampon, boyututampon, 'Zaman %I:%M %p. ',bilgi);
baskı ('%s',tampon);

dönüş 0;
}

Çıktı:

Bu örnekte, Tarih ve Saatin farklı biçimde nasıl yazdırılacağı gösterilmektedir. Dönüş değerinden tarihleri ​​temsil etmek çok kolay değildir. gettimeofday() işlev . Buraya, localtime() ve strftime() işlevler, dönüş değerini güzel bir şekilde temsil etmek için kullanılır. gettimeofday() .

NS localtime() işlev, bir işaretçiye referans olan bir argüman alır. tv_sn alanı yapı zaman aralığı ve bir işaretçiye bir başvuru döndürür yapı tm nesne.

NS strftime() işlev, tarih ve saati gösteren kişiselleştirilmiş, biçimlendirilmiş bir dize oluşturur. yapı tm Işaretçi. Biçim belirteçleri, biçimlendirilmiş görüntüleme için kullanılır. Örneğin, %d-%m-%Y %H:%M:%S biçim dizgisi tarih ve saati şu biçimde belirtir:

04-14-2020 13:09:42

Biçimlendirilmiş görüntüleme için kullanılabilen dönüştürme belirteçleri aşağıdadır:

belirleyici Anlam
%ile Mevcut yerel ayara göre haftanın gününün kısaltılmış adı.
%İLE Mevcut yerel ayara göre haftanın günü adı.
% B Mevcut yerel ayara göre kısaltılmış ayın adı.
% B Mevcut yerel ayara göre tam ayın adı.
% C Mevcut yerel ayar için tercih edilen tarih ve saat gösterimi.
%NS Ayın günü için ondalık sayı olarak (01 – 31 aralığı).
%H Ondalık sayı olarak 24 saatin (00 – 23 aralığı) saat olarak kullanılması.
%BEN Ondalık sayı olarak 12 saat (00 – 23 aralığı) saat olarak kullanılır.
%J Yılın günü için ondalık sayı olarak (001-366 aralığı).
%m Ay için ondalık sayı olarak (01 – 12 aralığı).
%M Dakikanın ondalık sayısı.
%P Belirtilen zaman değerine göre, 'am' veya 'pm' veya geçerli yerel ayar için eşdeğer dizeler.
%S Saniyenin ondalık sayısı.
% x Geçerli yerel ayar için tarihin tercih edilen temsili, ancak zaman yok.
% X Geçerli yerel ayar için saatin tercih edilen temsili, ancak tarih yok.
%ve Yıl ondalıktır ancak asır değildir (00 – 99 arası).
%VE Yıl, yüzyıl dahil ondalıktır.
%İLE BİRLİKTE Saat dilimi.

Program Yürütme Süresini Ölçmek için gettimeofday kullanma

#Dahil etmek
#Dahil etmek

intana() {

yapızaman aralığı başlangıcı,son;
gettimeofday(&Başlat,BOŞ);

için (intben= 0;ben<1e5 ;ben++) {
}

gettimeofday(&son,BOŞ);
baskı ('10^5'e kadar saymak için geçen süre: %ld mikro saniye ',
((son.tv_sn * 1000000 +son.tv_usec) -
(Başlat.tv_sn * 1000000 +Başlat.tv_usec)));

dönüş 0;
}

Çıktı:

Bu örnek, bunun nasıl olduğunu gösterir. gettimeofday() fonksiyonu, bir programın yürütme süresinin hesaplanması için kullanılabilir.

Çözüm

Bu şekilde, gettimeofday() işlevi Linux'ta kullanılabilir. Mevcut kodu taşımak için, gettimeofday() işlev kullanılabilir ancak yeni kodda kullanılmamalıdır. saat_gettime() işlevi yerine kullanılabilir. gettimeofday() .