Şimdiye kadar NSS modülündeki işlevlerin sözdizimsel arayüzünden bahsettik. Her işlevin gerçeklenmesi ister istemez farklı olacağında aslında söylenebilecek fazla bir şey yoktur. Fakat tüm işlevlerin uyması gereken bir kaç genel kuraldan bahsedilebilir.
Aslında arayüzde görülebilecek dört farklı işlev çeşidi vardır. Hepsi sistem veritabanları için kullanılan geleneksel işlevlerden türetilir. Aşağıdaki gösterimde vt, veritabanı sözcüğünün kısaltmasıdır.
-
enum nss_status _nss_veritabanı_setvtent (void)
Bu işlev hizmeti belirttiği işlem için hazırlar. Basit bir dosya temelli arama için dosyaları açan, diğer hizmetlerde basitçe hiçbir işlem yapmayan bir işlev olabilir.
Bu işlev için özel bir durum,
sethostent işlevindeki (
Konak İsimleri) gibi bazı
veritabanı veritabanları için ek argümanlar alabilmesidir. (
int setvtent (int) gösterimi ile karşılaştırılırsa "hosts" veritabanı için "host" kısaltmasının kullanıldığı görülür.)
Normal dönüş değeri
NSS_STATUS_SUCCESS olmalı; bir hata durumunda
NSS Modüllerinde İşlev Arayüzü bölümündeki tabloda belirtilen değerlerden biri olmalıdır.
-
enum nss_status _nss_veritabanı_endvtent (void)
Bu işlev hala açık olan tüm dosyaları kapatır ya da bellekten tamponları kaldırır. Kaldırılacak bir tampon ya da kapatılacak bir dosya yoksa, işlev yine basitçe hiçbir işlem yapmayacaktır.
Normalde NSS_STATUS_SUCCESS'dan farklı bir dönüş değeri olmaz.
-
enum nss_status _nss_veritabanı_getvtent_r (yapı *sonuc, char *tampon, size_t tampon_boyu, int *hata_num)
Bu işlev peşpeşe girdi almak için bir satırda defalarca çağrılacağından bir durum bilgisi tutmak zorundadır. Ama bu zorunluluk ayrıca işlevin gerçekte evresel olmayacağı anlamına da gelir. Sadece, bu işlev aynı anda yapılan başka çağrılarıyla verinin alındığı yere veri yazmayı denemeyecekse, sonuc ile belirtilen tampona yazacaksa evresel olabilir. Fakat, bir ortak durumu paylaşan çağrıların varlığında ve bir dosya erişimi durumunda bu, dosyadaki komşu girdilerin dönmesi anlamına gelir.
tampon tamponunun uzunluğunu belirtmede kullanılan tampon_boyu tamponu sonuç ile ilgili bazı ek verilerin saklanması için kullanılabilir ama bu durumda işlevin sonraki çağrılarının aynı tamponla yapılabilmesi mümkün olmaz. Ancak, bu tamponun bazı durum bilgilerini döndürmesinden hareketle bu tampon, bir çağrıdan diğerine durum bilgisini aktarmak için kullanılmamalıdır.
İşlev dönmeden önce, gerçekleme hata_num ile gösterilen değeri errno genel değişkeninde saklamalıdır. Modülün durağan ilintili yazılımlarla da çalışabilmesini sağlamak için bunun böyle olması önemlidir.
Evvelce açıklandığı gibi bu işlev ayrıca bir ek argüman alabilir. Bu kullanılan veritabanına bağlıdır; sadece hosts ve networks veritabanlarında görülür.
İşlev NSS_STATUS_SUCCESS ile döneceği gibi başka değerlerle de dönebilir. Son girdi okunduktan sonra NSS_STATUS_NOTFOUND dönebilir. Belirtilen tampon gereğinden küçükse NSS_STATUS_TRYAGAIN ile dönebilir. Bir _nss_veritabanı_setvtent çağrısı ile hizmet başta ilklendirilemediğinde bu işlev için izin verilen tüm dönüş değerleri burada ayrıca döndürülebilir.
-
enum nss_status _nss_veritabanı_getvtbyxx_r (parametreler, yapı *sonuc, char *tampon, size_t tampon_boyu, int *hata_num)
Bu işlev veritabanından parametreler ile adreslenen girdiyi döndürür. Bu argümanların sayısı ve türü değişebilir. Bunlar tek tek kullanıcı seviyesi arayüz işlevlerine bakarak saptanır. İşlevin evresel olmayan sürümünde belirtilen tüm argümanlar burada parametreler alanında belirtilmelidir.
Sonuç sonuc ile gösterilen yapıda saklanmalıdır. Eğer döndürülecek başka veriler varsa (örn, dizgeler sonuc yapısında sadece göstericilerle içerilebilir) işlev tampon ya da tampon_boyu ile gösterilen tamponları kullanmalıdır. Sabitler biçiminde olmayan hiçbir genel değişkenli veri olmamalıdır.
Bu işlevi gerçeklemesi setvtent işlevi tarafından atanan açıkkal seçeneği ile de bu bir gereklilikse ilgilenmelidir.
İşlev dönmeden önce, gerçekleme hata_num ile gösterilen değeri errno genel değişkeninde saklamalıdır. Modülün durağan ilintili yazılımlarla da çalışabilmesini sağlamak için bunun böyle olması önemlidir.
Evvelce açıklandığı gibi bu işlev hosts ve networks veritabanları için ayrıca bir ek argüman alabilir.