11 Nisan 2016 Pazartesi

-Linux Kernel C kütüphane Funksiyonları 1-

Merhaba,
Bu makalemde linux kernel içersinde bulunan C kütüphane fonksiyonları işlenmiştir.
Bu fonksiyonların bir bölümünü standart C kütüphanesi içersinde kullanabiliyoruz.
Ancak sadece kernel'e yönelik fonksiyonlar da mevcuttur. 
NOT: Makalenin devamı seriler halinde gelecektir.

>sprintf = Stringi formatlar ve buffer içine yerleştirir.
int sprintf (char *buf, const char *fmt, ...);

Funksiyon argumanları:
-buf = buffer içine sonucu yerleştirmek için.
-fmt = formatlanacak string belirlenir.
-... = String formatı için argumanlar belirlenir.

Dönüş değeri:
Bu fonksiyon 'buf' içine yazılan karakter sayısını döndürür.

NOT: Tampon taşmalarını önlemek için bunun yerine 'snprintf' veya 'scnprintf' kullanılması önerilir.
Örnek kullanım:
char buf[20] = "kerim fırat nasılsın";
int a =  sprintf(buf,"kerimfiratppppppppppppppppppppppppp");
printf("boyut:%d\n",a);
printf("%s\n",buf);

Çıktı:(tampon taşma sağlandı)
boyut:35
kerimfiratppppppppppppppppppppppppp
*** stack smashing detected ***: ./test2 terminated
Aborted (core dumped)


>snprintf = Stringi formatlar ve buffer içine yerleştirir.
int snprintf (char *buf, size_t size, const char *fmt, ...);
Funksiyon argumanları:
-buf  = buffer içine sonucu yerleştirmek için.
-size = tampon boyutu,sondaki boş alan da dahil.
-fmt  = formatlanacak string belirlenir.
-... = String formatı için argumanlar belirlenir.

Dönüş değeri:
fmt olarak belirlenen stringin karakter sayısını döndürür,sondaki boş alan hariçtir.
Bu funksiyonun özelliği 'size' olarak tampon boyutunun belirlenebilmesidir.Format stringi tampon boyutunu aşması durumunda veri içeriği üzerinde kesintiye gidilir.

Örnek kullanım:
char buf[20] = "kerim fırat nasılsın";
int a =  snprintf(buf, 11, "kerimfiratppppppppppppppppppppppppp");
printf("boyut:%d\n",a);
printf("%s\n",buf);
Çıktı:
boyut:35
kerimfirat


>scnprintf = Stringi formatlar ve buffer içine yerleştirir.
int scnprintf (char *buf, size_t size, const char *fmt, ...);
Funksiyon argumanları:
-buf  =  buffer içine sonucu yerleştirmek için.
-size = tampon boyutu,sondaki boş alan da dahil.
-fmt  = formatlanacak string belirlenir.
-... = String formatı için argumanlar belirlenir.

Dönüş değeri:
fmt olarak belirlenen stringin karakter sayısını döndürür,sondaki '\0' karakter dahil değildir.
Eğer 'size' boyutu 0'a eşitse,funksiyonun dönüş değeri 0 olur.


>vsprintf = Stringi formatlar ve buffer içine yerleştirir.
int vsprintf (char *buf, const char *fmt, va_list args);
Funksiyon argumanları:
-buf  = buffer içine sonucu yerleştirmek için.
-fmt  = formatlanacak string belirlenir.
-args = formatlanacak string için argumanlar belirlenir.

Dönüş değeri:
'buf' içersine yazılan karakter sayısını döndürür.

Örnek kullanım:
Yapacağımız örnekte iki ayrı veri tek veri haline getirilecektir.
'vsprintf' funksiyonu parametre olarak 'args' aldığı için birden fazla veri gönderilebilir.
Bu örnekte iki veri gönderiliyor.

char buf[80];
int vspfunc(char *fmt, ...)
{
   va_list aptr;
   int ret;
   va_start(aptr, fmt);
   ret = vsprintf(buf, fmt, aptr);
   va_end(aptr);

   return ret;
}

int main()
{
   int i = 44;
   char str[50] = "kerimfirat.blogspot.com";
   int r = vspfunc("%d %s",i,str);
   printf("%s\n", buf);
}
Çıktı:
44 kerimfirat.blogspot.com



---

Hiç yorum yok:

Yorum Gönder