Diğer Genelleme Seçenekleri
Önceki Genelleme Sonraki
Diğer Genelleme Seçenekleri
Önceki bölümde açıklanan seçeneklerin yanında glob işlevinin GNU gerçeklemesinde geçerli başka seçenekler de vardır. Bu seçenekler glob.h başlık dosyasında tanımlanmıştır. Bu seçeneklerin bazıları günümüzdeki kabuk gerçeklenimlerinde kullanılan işlevselliği sağlar.
GLOB_PERIOD
. (nokta) karakteri özel karakter olarak ele alınır. Bu durumda özel kalıp karakteri olarak eşleştirilmez. Dosya İsmi Kalıpları bölümündeki FNM_PERIOD seçeneğine de bakınız.
GLOB_MAGCHAR
GLOB_MAGCHAR seçeneği glob işlevinin seçenekler parametresinde kullanmak için değildir. glob işlevi bu seçeneği, eğer kalıp, özel kalıp karakterleri içeriyorsa sonucun bu yolla elde edileceğini belirtmek için glob_t yapısının gl_flags üyesinde kullanır.
GLOB_ALTDIRFUNC
Bu seçenek etkinse, glob gerçeklemesi dosya sistemine erişmek için kütüphanedeki işlevleri değil, kullanıcı tarafından dizi-gst ile gösterilen yapı içinde belirtilen işlevleri kullanır. Dizinlere erişim için kullanılan işlevler Dizinlere Erişim ve Bir Dosyanın Özniteliklerinin Okunması bölümlerinde açıklanmıştır.
GLOB_BRACE
Bu seçenek etkinse kaşlı ayraçlar özel olarak ele alınır. Bu durumda kaşlı ayraçların doğru gruplanması gerekir. Yani kaşlı ayraçlar çiftler halinde olmalıdır. İç içe gruplamalar yapılabilir. Böylece bir gruplama bir diğerini tanımlamakta kullanılabilir. Bir kaşlı ayraç ifadesi, başka bir kaşlı ayraç ifadesinin içinde tanımlanmışsa onun dışına çıkmaması gerektiğine dikkat etmelisiniz.
Bir kaşlı ayraç grubundaki dizgeler, virgüllerle ayrılarak ayrı ifadeler haline getirilebilir. Bu durumda virgüllerin bu amaçla kullanıldıkları ve dizgelerin virgül içermedikleri varsayılır. Virgül kullanılarak ayrılan ifadeler aynı seviyede olmalıdır. Alt ifadeler kaşlı ayraç içine alınmışsa bunların içindeki virgüller eşleştirilmez. Kaşlı ayraçlı alt gruplarda daha derin seviyeleri elde etmede kullanılır. Bir kullanım örneği:
glob ("{foo/{,bar,biz},baz}", GLOB_BRACE, NULL, &result)
Eğer hataları gözönüne almazsak, şuna eşdeğerdir:
glob ("foo/", GLOB_BRACE, NULL, result)
glob ("foo/bar", GLOB_BRACE|GLOB_APPEND, NULL, &result)
glob ("foo/biz", GLOB_BRACE|GLOB_APPEND, NULL, &result)
glob ("baz", GLOB_BRACE|GLOB_APPEND, NULL, &result)
GLOB_NOMAGIC
Eğer kalıp herhangi bir özel kalıp karakteri içermiyorsa (doğrudan dosya ismi verilmişse), bu isimde bir dosya yoksa bile bu kalıp dizgesi döndürülür.
GLOB_TILDE
Bu seçenek etkinse ve kalıp yaklaşık işareti (~) ile başlıyorsa, bu karakter özel olarak ele alınır. Bu durumda yaklaşık işaretinin bir kullanıcının ev dizinini gösterdiği varsayılır.
Eğer ~ kalıptaki tek karakterse ya da onu bir / (bölü çizgisi) izliyorsa, bu kalıp sürecin sahibinin ev dizini ile eşleştirilir. Bilgi, getlogin ve getpwnam işlevleri kullanılarak sistem veritabanlarından okunur. Örneğin, ev dizini /home/bart olan bart kullanıcısı için çağrı şöyle olurdu:
glob ("~/bin/*", GLOB_TILDE, NULL, &result)
Bu çağrıdan /home/bart/bin döner. Burada başka bir kullanıcının ev dizini de belirtilebilirdi. Bunun için yaklaşık işaretinden sonra kullanıcının ismini belirtmek yeterlidir. homer'in bin dizinini almak istersek:
glob ("~homer/bin/*", GLOB_TILDE, NULL, &result)
Eğer kullanıcı ismi geçersizse ya da ev dizini bir nedenle saptanamamışsa kalıba dokunulmaksızın kalıp dizgesi sonuç olarak döndürülür. Son örnekte, homer isminde bir kullanıcı yoksa işlev ~homer dizinini aramaz ve sonuç olarak "~homer/bin/*" dizgesini döndürür.
Bu işlevsellik C kabuklarında nonomatch seçeneğinin etkin olduğu duruma eşdeğerdir.
GLOB_TILDE_CHECK
Bu seçenek belirtilmişse glob işlevi GLOB_TILDE seçeneği verilmiş gibi davranır. Tek fark, belirtilen kullanıcı yoksa ya da bir ev dizini saptanamamışsa kalıp dizgesi döndürülmez ve işlem bir hata ile sonuçlanır.
Bu işlevsellik C kabuklarında nonomatch seçeneğinin etkin olmadığı duruma eşdeğerdir.
GLOB_ONLYDIR
Bu seçenek belirtilmişse, bu, çağrıcının sadece kalıpla eşleşen dizinle ilgilendiğine dair bir ipucu olarak değerlendirilir. Eğer dosya hakkında saptanan bilgi onun bir dizin olmadığını belirtiyorsa bunlar reddedilir ama bunların türünü saptamak için ek bir çalışma yapılmaz. Yani çağrıcı hala bir süzme çalışması yapabilir.
Bu işlevsellik sadece GNU glob gerçeklemesi ile kullanılabilir. Aslında dahili kullanım için düşünülmüşse de kullanıcı için de yararlı olabileceğinden burada belgelenmiştir.
glob çağrısı çoğu durumda döndürdüğü sonucu saklamak için özkaynak ayırır. glob işlevi hep aynı glob_t nesnesi ile çağrılsa bile her çağrıda özkaynaklar önce serbest bırakılıp sonra tekrar ayrıldığından bir kaçak oluşmaz. Fakat bu işlem her çağrıda hep aynı süre içinde olmaz.
void globfree
(glob_t *dizi-gst)
işlev
globfree işlevi önceki glob çağrılarında dizi-gst ile gösterilen nesne için ayrılan yeri serbest bırakır. Bu glob_t türündeki nesne artık kullanılmayacaksa bu işlev çağrılarak bu alan serbest bırakılmalıdır.
void globfree64
(glob64_t *dizi-gst)
işlev
Bu işlev globfree işlevinin benzeridir, farklı olarak glob64 işlevi ile ayrılan bir glob64_t nesnesini serbest bırakmak için kullanılır.
Önceki Üst Ana Başlık Sonraki
Genelleme Seçenekleri Başlangıç Düzenli İfade Eşleştirme
Bir Linux Kitaplığı Sayfası