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.
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:
set…ent ve end…ent işlevleri dışında tüm işlevler için, bu liste geçerlidir.