Yüksek Çözünürlüklü Zaman
Önceki Mutlak Zaman Sonraki
Yüksek Çözünürlüklü Zaman
time_t veri türü basit zamanları bir saniyelik hassasiyet ile göstermekte kullanılır. Bazı uygulamalarda ise daha yüksek hassasiyet gerekir.
Bu nedenle, GNU C kütüphanesi mutlak zamanı bir saniyeden daha yüksek hassasiyetle hesaplayabilen işlevler de içerir. Bu bölümde bahsi geçen veri türleri ve işlevler sys/time.h başlık dosyasında bildirilmiştir.
struct timezone
veri türü
struct timezone yapısı yerel zaman dilimi ile ilgili mümkün olan en az bilgiyi saklamak için kullanılır. Şu üyelere sahiptir:
int tz_minuteswest
UTC'nin batısındaki dakika sayısıdır.
int tz_dsttime
Sıfırdan farklıysa, yılın belli bir döneminde yaz saati uygulanır.
struct timezone türü artık atıl olmuştur ve asla kullanılmamalıdır. Buradaki bu veri türü ile ilgili oluşumlar yerine, Zaman Dilimi Değişkenleri ve İşlevleri bölümünde anlatılan oluşumlar kullanılmalıdır.
int gettimeofday
(struct timeval  *zaman,
 struct timezone *zamandilimi)
işlev
gettimeofday işlevi, mutlak zaman başlangıcından beri geçen süreyi zaman ile gösterilen struct timeval yapısı ile döndürür. Zaman dilimi bilgisi ise zamandilimi ile gösterilen yapı içinde döner. zamandilimi bir boş gösterici olarak verilmişse, zaman dilimi bilgisi yoksayılır.
Eğer işlev başarılı olursa sıfır değeri ile döner. Aksi takdirde, -1 ile döner ve errno değişkenine şu değer atanır:
ENOSYS
İşletim sistemi zaman dilimi bilgisinin alınmasını desteklemiyor. GNU işletim sistemi zaman dilimi gösteriminde 4.3 BSD'nin atıl bir özelliği olan struct timezone kullanımını desteklemez. Bunun yerine Zaman Dilimi Değişkenleri ve İşlevleri bölümünde açıklanan oluşumları kullanın.
int settimeofday
(const struct timeval  *zaman,
 const struct timezone *zamandilimi)
işlev
settimeofday işlevi sistem saatini argümanlarındaki değerlerle ayarlar. gettimeofday işlevindeki gibi mutlak zaman, mutlak zaman başlangıcından (epoch) beri geçen süre olarak ifade edilirken zaman dilimi bilgisi de zamandilimi bir boş gösterici ise yoksayılır.
settimeofday işlevini kullanırken süper kullanıcı olmak zorundasınız.
Bazı çekirdekler sistem saatini donanım saati gibi bir kaynaktan açılış sırasında ayarlar. Linux gibi diğerleri ise, sistem saatini "geçersiz" bir duruma getirir (saat okunmaya çalışılır ve başarısız olur). Sistem başlatma betikleri ile yapılan bir stime çağrısı ile sistem saati geçersiz durumdan çıkarılır.
settimeofday işlevi, sistem saatinin beklenmedik şekilde ileri ya da geri kalmasına ve sistemde çeşitli sorunlar çıkmasına sebep olur. Sistem saatini geçici olarak hızlandırarak ya da yavaşlatarak bir zamandan diğerine yumuşak bir geçiş yapmak için aşağıdaki adjtime işlevini kullanın.
Linux çekirdeği ile, adjtimex işlevi aynı şeyi yapar, ayrıca sistem saatinin hızında kalıcı değişiklikler yaparak sık sık düzeltme yapma ihtiyacını ortadan kaldırır.
Eğer işlev başarılı olursa sıfır değeri ile döner. Aksi takdirde, -1 ile döner ve errno değişkenine şu değer atanır:
EPERM
Yetkileri yetersiz olduğundan bu süreç saati ayarlayamaz.
ENOSYS
zamandilimi bir boş gösterici değil ama işletim sistemi zaman dilimi bilgisi ayarını desteklemiyor.
int adjtime
(const struct timeval *delta,
 struct timeval       *eskidelta)
işlev
Bu işlev sistem saatini aşamalı olarak hızlandırır ya da yavaşlatır. Böyle ayarlanan sistem saati mutlak zamanı düzenli bir artışla gösterir. Saatin ayarını basitçe değiştirirseniz bu böyle olmaz.
delta argümanı bir göreli ayar belirtir. Negatifse belirtilen süre tamamlanıncaya kadar saat yavaşlatılır, pozitifse hızlandırılır.
eskidelta argümanı bir boş gösterici değilse, işlev henüz tamamlanmamış olan ayarın önceki ayar bilgisi ile döner.
Bu işlev genellikle sistem saatini yerel ağın saati ile eşzamanlamak için kullanılır. İşlevi kullanabilmek için yetkili kullanıcı olmalısınız.
Linux çekirdeği ile saat hızını kalıcı olarak değiştirmek için adjtimex işlevini kullanabilirsiniz.
Eğer işlev başarılı olursa sıfır değeri ile döner. Aksi takdirde, -1 ile döner ve errno değişkenine şu değer atanır:
EPERM
Saati ayarlamak için yetkileriniz yetersiz.
Taşınabilirlik Bilgisi
gettimeofday, settimeofday ve adjtime işlevleri BSD'den alınmıştır.
Aşağıdaki işlevle ilgili semboller sys/timex.h başlık dosyasında bildirilmiştir.
int adjtimex
(struct timex *timex)
işlev
adjtimex işlevi ntp_adjtime işlevi ile aynıdır. Bkz. Yüksek Doğrulukta Saat.
Bu işlev sadece Linux çekirdeği ile kullanılabilir.
Önceki Üst Ana Başlık Sonraki
Basit Zaman Başlangıç Yerel Zaman
Bir Linux Kitaplığı Sayfası