NSS Modüllerinde İşlev Arayüzü
Önceki NSS Modül Yapısı Sonraki
NSS Modüllerinde İşlev Arayüzü
Artık, modüllerdeki işlevler hakkında bilgimiz var. Şimdi türleri açıklayalım. Bir önceki bölümde işlevlerin evresel sürümlerinden bahsetmiştik. Bu, işlevin evresel olmayan sürümüne göre ek argümanlar gerektiği anlamına gelir. gethostbyname işlevinin evresel olmayan ve evresel sürümlerinin prototiplerine bakalım:
struct hostent *gethostbyname (const char *isim)

int gethostbyname_r (const char     *isim,
                    struct hostent  *sonuc_tamponu,
                    char            *tampon,
                    size_t           tampon_uzunlugu,
                    struct hostent **sonuc,
                    int             *hata_durumu)
İşlevin NSS modülündeki prototipi ise şöyle olur:
enum nss_status _nss_files_gethostbyname_r (const char     *isim,
                                            struct hostent  *sonuc_tamponu,
                                            char            *tampon,
                                            size_t           tampon_uzunlugu,
                                            int             *hata_num,
                                            int             *hata_durumu)
Yani, arayüz işlevi aslında sonuc argümanı olmayan ve dönüş değeri değişmiş evresel işlevdir. İşlevin evresel olmayan sürümü sonuca bir gösterici ile dönerken evresel sürümü bir enum nss_status değeri ile döner:
NSS_STATUS_TRYAGAIN
sayısal değeri: -2
NSS_STATUS_UNAVAIL
sayısal değeri: -1
NSS_STATUS_NOTFOUND
sayısal değeri: 0
NSS_STATUS_SUCCESS
sayısal değeri: 1
Şimdi, /etc/nsswitch.conf dosyasında kullanılar eylem öğelerinin yerini görelim.
Kaynak kodunu incelerseniz, beşinci bir değerin varlığını görürsünüz: NSS_STATUS_RETURN. Bu sadece dahili olarak kullanılan bir değerdir, bir kaç işlev tarafından yukarıdaki değerin kullanılamadığı yerlerde kullanılır. Eğer gerekliyse, daha fazla ayrıntıya kaynak kodunu inceleyerek ulaşabilirsiniz.
Arayüz işlevinin bir hata döndürmesi durumunda, doğru hata numarasının *hata_num içinde saklanması önemlidir. Bazı dönüş durum değerleri sadece bir hata kodu ile ilgiliyken diğerleri daha fazlası ile ilgilidir.
NSS_STATUS_TRYAGAINEAGAIN Kullanılan işlevlerden biri ya geçici olarak özkaynaksız çalıştı ya da hizmet şu an kullanışsız.
 ERANGE Belirtilen tampon yeterince geniş değil. İşlev tekrar daha geniş bir tamponla çağrılmalı.
NSS_STATUS_UNAVAILENOENT Gerekli girdi dosyalarından biri bulunamadı.
NSS_STATUS_NOTFOUNDENOENTİstenen girdi elverişli değil.
Bunlar önerilen değerlerdir. Başka hata kodları olabileceği gibi açıklanan hata kodları farklı anlamlara da gelebilir. Biri dışında: NSS_STATUS_TRYAGAIN döndüğünde, hata kodu, belirtilen tamponun yetersiz olduğun anlatan ERANGE olmalıdır. Bunun dışında kritik önemde bir şey yoktur.
Yukarıdaki işlev hemen hemen diğer tüm modül işlevlerinde olmayan bazı özelliklere sahiptir. hata_durumu diye bir argümanı var. Bu argümanın gösterdiği değişkene, işlev bir şekilde başarısız olduğunda hata durumu konulacaktır. Evresel işlevler h_errno genel değişkenini kullanamazlar; gethostbyname_r ile yapılan gethostbyname çağrılarında son argüman &hata_durumu olarak belirtilir.
getXXXbyYYY işlevleri NSS modüllerinde en önemli işlevlerdir. Ancak başka yöntemlerle erişilen veritabanları da vardır (setpwent, getpwent ve endpwent işlevleri ile erişilen parola veritabanını buna örnek verebiliriz). Bunlar daha sonra ayrıntılı olarak açıklanacaktır. Modül işlevinin imzasını saptayacak genel bir yöntem:
  • dönüş değeri int'dir;
  • ismi NSS Modüllerinin İsimlendirme Şeması bölümünde açıklandığı gibidir;
  • işlevin ilk argümanları evresel olmayan eşdeğerinin argümanları ile aynıdır;
  • sonraki argümanları şunlardır:
    STRUCT_TYPE *sonuc_tamponu
    sonucun saklandığı tampona gösterici. STRUCT_TYPE, normalde veritabanının karşılığı olan bir yapıdır.
    char *tampon
    sonuçla ilgili ek verilerin saklanabileceği tampona gösterici.
    size_t tampon_uzunlugu
    tampon ile gösterilen tamponun uzunluğu.
  • konak ismi ve ağ ismi arama işlevlerinde hata_durumu hep son argüman olarak görünür.
set…ent ve end…ent işlevleri dışında tüm işlevler için, bu liste geçerlidir.
Önceki Üst Ana Başlık Sonraki
NSS Modüllerinin İsimlendirme Şeması Başlangıç NSS'nin Genişletilmesi
Bir Linux Kitaplığı Sayfası