Yüksek Doğrulukta Saat
Önceki Mutlak Zaman Sonraki
Yüksek Doğrulukta Saat
ntp_gettime ve ntp_adjtime işlevleri doğruluğunu arttırmak amacıyla sistem saatini izlemek ve değiştirmek için bir arayüz sağlar. Örneğin, saat hızını daha iyi bir ayar için hızlandırabilir ya da başka bir kaynaktan saati ayarlayabilirsiniz.
Bu işlevler özellikle çok sayıda sistemin saatini yüksek hassasiyetli bir saat kullanarak ayarlamak için ağ zaman protokolü (NTP - Network Time Protocol) ile gerçeklenmiş sunucular tarafından kullanılır.
Bu işlevler sys/timex.h başlık dosyasında bildirilmiştir.
struct ntptimeval
veri türü
Bu yapı sistem saati ile ilgili bilgiler için kullanılır. Şu üyelere sahiptir:
struct timeval time
Mutlak zaman başlangıcından (epoch) itibaren geçen süre olarak ifade edilen, o anki mutlak zamandır. struct timeval veri türü Süre bölümünde açıklanmıştır.
long int maxerror
Mikrosaniyeler cinsinden ölçülen en büyük hata miktarıdır. ntp_adjtime ile düzenli aralıklarla güncellenmedikçe, bu değer platforma özel en büyük değere ulaşacaktır.
long int esterror
Mikrosaniyeler cinsinde ölçülen tahmini hatadır. Bu değer gerçek mutlak zamandaki sistem saatinin tahmini ayar noktasını belirtmek için ntp_adjtime tarafından ayarlanabilir.
int ntp_gettime
(struct ntptimeval *tptr)
işlev
ntp_gettime işlevi tptr tarafından gösterilen yapıyı o anki değerlerle doldurur. Bundan sonra yapının elemanları çekirdeğin kabul ettiği zamanlayıcı gerçeklemesinin değerlerini içerir. Böyle değilse, bir ntp_adjtime çağrısı gerekir.
Başarı durumunda dönüş değeri sıfır, aksi takdirde sıfırdan farklıdır. Aşağıdaki errno değeri bu işlev için atanmıştır:
TIME_ERROR
Hassas saat modeli şu an için düzgün olarak ayarlanamadı; saat eşzamanlanmış kabul edilemediğinden bu değerleri dikkatli kullanmalısınız.
struct timex
veri türü
Bu yapı sistem saatini izlemek ve denetlemek için kullanılır. Şu üyeleri içerir:
unsigned intmodes
Hangi kiplerin geçerli olduğunu belirtir. Etkin kip belirtmek için çeşitli sembolik sabitler "ikil veya"lanarak birleştirilebilir. Bu sabitler MOD_ ile başlar.
long int offset
Gerçek mutlak zamandaki sistem saatinin o anki ayar noktasını belirtir. Değer mikrosaniye cinsindendir. modes üyesinde MOD_OFFSET biti varsa ayar noktası (ve olası başka bağımlı değerler) atanmış olabilir. Ayar noktasının mutlak değeri MAXPHASE'dan büyük olmamalıdır.
long int frequency
Gerçek mutlak zamanla sistem saati arasındaki farkı frekans olarak belirtir. Değer bir PPM oranıdır (milyonda birlik değerler, 0.0001%). Oranlama 1 << SHIFT_USEC'dir. Değer, MOD_FREQUENCY biti ile atanabilir, fakat MAXFREQ değerinden büyük olamaz.
long int maxerror
Mikrosaniyeler cinsinden ölçülen en büyük hata miktarıdır. Yeni bir değer MOD_MAXERROR biti kullanılarak atanabilir. ntp_adjtime ile düzenli aralıklarla güncellenmedikçe, bu değer platforma özel en büyük değere ulaşacaktır.
long int esterror
Mikrosaniyeler cinsinden ölçülen tahmini hata miktarıdır. Yeni bir değer MOD_ESTERROR biti kullanılarak atanabilir.
int status
Bu üye, saat çarkının çeşitli durumlarını gösterir. Bunlar önemli bitlerle ifade edilen sembolik sabitlerdir ve STA_ ile başlarlar. Bu bitlerin bazıları MOD_STATUS biti kullanılarak güncellenebilir.
long int constant
Çekirdek içinde gerçeklenmiş PLL'in (phase locked loop - faz kilitlemeli çevrim) değişmezliğini ya da band genişliğini ifade eder. Bu değer MOD_TIMECONST biti kullanılarak değiştirilebilir.
long int precision
Sistem saati okumasındaki en büyük hatayı ya da doğruluğu ifade eder. Değer mikrosaniye cinsindendir.
long int tolerance
Sistem saatindeki en büyük frekans hatasını milyonda birlik değerler (PPM) olarak ifade eder. Bu değer maxerror'ü her saniyede bir arttırmakta kullanılır.
struct timeval time
O anki mutlak zamanı gösterir.
long int tick
Mikrosaniye cinsinden saat tikleri arasındaki süredir. Bir saat tiki sistem saatinin temel aldığı sürekli tekrarlanan bir zamanlayıcı kesmesidir.
long int ppsfreq
Sistem saatinin zapturapt altına alınması için saniyede bir darbelik (PPS) bir sinyalin kullanılması durumunda anlamlı olan bir kaç isteğe bağlı üyeden ilkidir. Değer milyonda birlik (PPM) bir oran olarak, sistem saati ile PPS sinyali arasındaki frekans farkını belirtir.
long int jitter
PPS sinyalindeki saçılmanın ortasına göre mikrosaniye cinsinden bir ortalamasıdır.
int shift
PPS kalibrasyon aralığının PPS_SHIFT'den PPS_SHIFTMAX'a kadar ikilik üstel değeridir.
long int stabil
PPS sinyalindeki ortasına göre saçılmanın milyonda birlik (PPM) oranıdır.
long int jitcnt
Seğirmenin (jitter) izin verilen en büyük değer olan MAXTIME'ı aştığında darbe sayısını gösteren bir sayaçtır.
long int calcnt
Başarılı kalibrasyon aralıklarının sayısını gösteren bir sayaçtır.
long int errcnt
Kalibrasyon hatalarının sayısını gösteren bir sayaçtır (hatalar çok geniş ayar aralıklarından ya da seğirmelerden kaynaklanır).
long int stbcnt
Kararlılık eşiği aşıldığında yapılan kalibrasyonların sayısını gösteren bir sayaçtır.
int ntp_adjtime
(struct timex *tptr)
işlev
ntp_adjtime işlevi tptr ile gösterilen yapıyı o anki değerlerle doldurur.
Ek olarak, ntp_adjtime işlevi *tptr içinde aktardığınız değerlerle eşleşen bazı ayarları günceller. Güncellenecek ayarları belirtmek için *tptr'nin modes elemanı kullanılır. Bu yolla, offset, freq, maxerror, esterror, status, constant ve tick değerlerini güncelleyebilirsiniz.
modes = sıfır ise hiçbir şey yapılmaz.
Yalnız süper kullanıcı bu ayarları güncelleyebilir.
Başarı durumunda dönüş değeri sıfır, aksi takdirde sıfırdan farklıdır. Aşağıdaki errno değerleri bu işlev için atanmıştır:
TIME_ERROR
Hassas saat modeli şu an için düzgün olarak ayarlanamadı; saat eşzamanlanmış kabul edilemediğinden bu değerleri dikkatli kullanmalısınız. Başka bir sebep de izin verilmediği halde yeni değerlerin belirtilmesi olabilirdi.
EPERM
Süreç bir ayarın güncellenmesini belirtiyor ama süper kullanıcı değil.
Daha ayrıntılı bilgi için RFC1305 (Network Time Protocol, Version 3 [Ağ Zaman Protokolü, 3. sürüm]) ve onunla ilgili belgelere bakınız.
Taşınabilirlik Bilgisi
GNU C kütüphanesinin eski sürümlerinde bu işlev yoktu ama eşanlamlısı olan adjtimex işlevi vardı.
Önceki Üst Ana Başlık Sonraki
Yerel Zaman Başlangıç Zaman Değerlerinin Biçimlenmesi
Bir Linux Kitaplığı Sayfası