Argz İşlevleri
Önceki Argz ve Envz Vektörleri Sonraki
Argz İşlevleri
Her argz vektörü ilk elemanı gösteren char * türünde bir gösterici ve dizi boyutunu belirten size_t türünde bir gösterici ile temsil edilir. Her ikisi de bir boş argz vektörünü gösteren 0 ile ilklendirilir. Tüm argz işlevleri ya bir gösterici ile bir boyut argümanı ya da her ikisinin de değişebileceği öngörüldüğü durumlarda her ikisi de bir gösterici olan argümanlar alırlar.
Argz işlevleri dizge dizilerini ayırmak ya da büyütmek için malloc/realloc işlevlerini kullanır. Böylece bu işlevler tarafından oluşturulan tüm argz vektörleri free işlevi ile serbest bırakılabilir. Buna karşın, bir dizgeyi büyütebilen argz işlevlerinin dizgeyi malloc kullanarak ayırdığı umulur (bu tür argz işlevleri, bellek sıralaması ne olursa olsun, sadece kendi argümanlarını saptar ve onları değiştirmek için aynı alanı kullanır). Bakınız: Özgür Bellek Ayırma.
Bellek ayırma işlemi de yapan tüm argz işlevleri error_t türünde bir değer ile döner. Başarı durumunda bu değer 0’dır. Aksi takdirde, bir ayırma hatası oluşursa ENOMEM ile döner.
Bu işlevler standart bir başlık dosyası olan argz.h içinde bildirilmiştir.
error_t argz_create
(char *const argv[],
 char      **argz,
 size_t     *argz_boyu)
işlev
argz_create işlevi argv Unix tarzı argüman vektörünü (normal C dizgelerine göstericilerden oluşmuş, (char *)0 ile sonlandırılmış bir diziye gösterici; bkz, Yazılım Argümanları) aynı elemanlarla argz vektörüne dönüştürür ve argz ve argz_boyu ile döndürür.
error_t argz_create_sep
(const char *dizge,
 int         ayraç,
 char      **argz,
 size_t     *argz_boyu)
işlev
argz_create_sep işlevi, boş karakter sonlandırmalı dizge dizgesini her ayraç karakteri için bir eleman olmak üzere bir argz vektörüne (argz ve argz_boyu içinde döndürerek) dönüştürür.
size_t argz_count
(const char *argz,
 size_t      argz_boyu)
işlev
argz ve argz_boyu ile belirtilen argz vektörünün eleman sayısı ile döner.
void argz_extract
(char  *argz,
 size_t argz_boyu,
 char **argv)
işlev
argz_extract işlevi, argz ve argz_boyu ile belirtilen argz vektörünü, (argz içindeki her elemana bir göstericiyi 0 ile sonladırılmış olarak argv içindeki kendi konumuna yerleştirerek) argv içinde saklanan Unix tarzı argüman vektörüne dönüştürür. argv, argz dizisinin tüm elemanları artı sonlandırıcı (char *)0 için yeterince yer bulunan önceden ayrılmış bir alanı göstermelidir ((argz_count (argz, argz_boyu) + 1) * sizeof (char *) bayt yeterlidir). argv içindeki dizge göstericileri, argz içindeki alanları gösterdiğinden (kopyalama yapılmaz), argz'nin argv etkinken değişmemesi isteniyorsa ayrıca kopyalanmalıdır. Bu işlev argz içindeki elemanların bir exec işlevine aktarılması için kullanışlıdır.
void argz_stringify
(char  *argz,
 size_t uzunluk,
 int    ayraç)
işlev
argz_stringify işlevi, argz içindeki '\0' karakterlerini ayraç karakteri ile değiştirerek (dizgeyi sonlandıracak olan sonuncu boş karakter hariç) elemanları birleştirip normal bir dizgeye çevirir. Bu işlev, argz'nin okunabilir olarak basılması gibi işlemler için faydalıdır.
error_t argz_add
(char      **argz,
 size_t     *argz_boyu,
 const char *dizge)
işlev
argz_add işlevi, dizge dizisini *argz argz vektörünün sonuna ekler ve *argz ile *argz_boyu argümalarını yeni duruma uygun olarak günceller.
error_t argz_add_sep
(char      **argz,
 size_t     *argz_boyu,
 const char *dizge,
 int         ayraç)
işlev
argz_add_sep işlevi argz_add işlevine benzer. Farklı olarak, dizge dizisini ayraç karakterlerine göre alt dizgelerine ayırarak ekler. Bu işlev, PATH değişkeni gibi bir değişkenin değerini oluşturan tüm elamanların ayrı birer dizge olarak eklenmek istenmesi durumunda yararlıdır (ayraç karakteri olarak ':' verilerek).
error_t argz_append
(char      **argz,
 size_t     *argz_boyu,
 const char *tampon,
 size_t      tampon_boyu)
işlev
argz_append işlevi, tampon_boyu’nu *argz_boyu’na ve tampon ile başlayan dizgeyi *argz vektörüne ekler ve bunları bir arada tutan yeni bir *argz alanına yerleştirir (eskisi serbest bırakılır).
void argz_delete
(char  **argz,
 size_t *argz_boyu,
 char   *girdi)
işlev
Eğer girdi, *argz vektörünün elemanlarından birinin başlangıcını gösteriyorsa, argz_delete işlevi bu girdiyi kaldıracak ve *argz ile *argz_boyu’nu güncelleyerek *argz vektörüne yeniden yer ayıracaktır. Eleman silen argz işlevleri genelde argz argümanları için bellekte yeniden yer ayırdıklarından buradaki girdi gibi kaldırılan elemanın göstericisi geçersiz olur.
error_t argz_insert
(char      **argz,
 size_t     *argz_boyu,
 char       *önce,
 const char *girdi)
işlev
argz_insert işlevi, girdi dizgesini *argz vektörünün önce ile gösterilen elemanının öncesine ekler ve *argz ile *argz_boyu’nu güncelleyerek *argz için yeniden yer ayırır. Eğer önce 0 ise işlev argz_add işlevinin yaptığı gibi elemanı sona ekler. İlk eleman *argz ile aynı olduğundan önce için *argz verilirse, girdi dizgesi başa eklenir.
char *argz_next
(char       *argz,
 size_t      argz_boyu,
 const char *girdi)
işlev
argz_next işlevi argz vektöründeki elemanları yinelemek için uygun bir yol sağlar. argz vektöründe girdi elemanından sonraki elemana ya bir gösterici ile döner ya da girdi elemanını izleyen bir eleman yoksa 0 ile döner. girdi olarak 0 verilirse, argz vektörünün ilk elemanı döner.
Bu davranış iki yineleme tarzı akla getirir:
    char *girdi = 0;
    while ((girdi = argz_next (argz, argz_boyu, girdi)))
      eylem;
(çift parantez kullanımı bazı C derleyicileri için gereklidir) ve:
char *girdi;
for (girdi = argz;
     girdi;
     girdi = argz_next (argz, argz_boyu, girdi))
  eylem;
İkincisi argz vektörünün boş olması durumunda bir boş bellek bloğuna gösterici değil, 0 değerinde olması gerekliliğine bağlıdır; bu sabit, buradaki işlevler tarafından oluşturulan argz işlevleri için sağlanmıştır.
error_t argz_replace
(char      **argz,
 size_t     *argz_boyu,
 const char *dizge,
 const char *ile,
 unsigned   *yineleme_sayısı)
işlev
argz içindeki dizge dizgelerini ile dizgesi ile değiştirir ve argz için gerekliyse yeniden yer ayırır. yineleme_sayısı sıfırdan farklı ise *yineleme_sayısı uygulanan yer değiştirmenin sayısı kadar arttırılır.
Önceki Üst Ana Başlık Sonraki
Argz ve Envz Vektörleri Başlangıç Envz İşlevleri
Bir Linux Kitaplığı Sayfası