cURL kütüphanesinin C'de Kullanımı

10:46 ,


Derlediğimiz lib dosyasını projemize dahil etmek için yapmamız gereken bazı ayarlamalar vardır. ilk önce yapılması gereken preprocessor definition kısmına BUILDING_LIBCURL tanımlamasının girilmesi gerekmektedir.





Ardından Additional Dependencies kısmına ise libcurl.lib,ws2_32.lib,wldap32.lib kütüphanelerinin girilmesi gerekmektedir.




.lib dosyamızın yeri de projemize gösterilmesi gerekir.







Preprocessor'ün ihtiyacı olan başlık dosyalarının yerinin de gösterilmesinin ardından cURL artık kullanılmaya hazır hale gelmiştir.




Eğer bu noktada linker hatası aldıysanız problemin 32 Bit - 64 Bit farkı olma olasılığı yüksektir.





Çünkü biz kütüphanemizi 32 Bitte derlemiş olabiliriz.(öyle yaptık)


Bu noktada yapılması gereken şey libcurl projesini 64 Bitte derlemek olacaktır. Ardından .lib dosyasını eskisiyle değiştirilmesinin ardından projemiz başarıyla çalışacaktır.









Bu noktada projemizi 32 Bit'e çeksek bu sefer yine linker hatası verecektir. Çünkü libcurl'ü 64 Bitte derledik.











cURL kütüphanesinin C Projesine dahil edilmesi

10:50 ,




cURL kütüphanesi C ile http gibi web isteklerini gerçekleştirmek için kullanılan bir kütüphanedir. Öncelikle yapılamsı gereken web sitesinden ( http://curl.haxx.se/ ) ilgili dosya indirilir.




ve dosya içeriğindeki vs-> vc8 -> lib içindeki visual studio proje kısayolu ile libcurl projesi açılır. 


Projenin çıktısı .lib dosyası olacaktır. Derleme işleminin ardından .lib dosyamızın oluştuğu görülecektir. 



Projeyi derlemeden önce aditional include library kısmına projenin ihtiyacı olan dosyaların yerlerinin düzgün verildiğine dikkat ediniz. 



Ardından projeyi build ettiğinizde projenin derlendiğini göreceksiniz. Burda dikkat edilmesi gereken parametreler 32 Bit - 64 Bit ve Debug -Release Mod seçenekleri olacaktır.

Umask Fonksiyonu


umask user mask  kelimelerinden türetilmiştir. Dosya oluştururken hangi haklarla oluşturulacağını ayarlayan C POSIX fonksiyonudur. Kısaca fonksiyon 0777 ile mask değerini logical and (&) işlemine sokar.



umask(0) demek oluşturulan dosya tüm gruplar için  rwx haklarına sahip olacağını ( u=rwx, g=rwx, o=rwx ) umask(777) ile ise hiçbir hakka ( u=, g=, o= ) sahip olunmayacağını belirtir.



Aşağıda görüldüğü gibi umask değerinin değiştirmezsek user için rwx diğerleri için hiçbir hakka sahip olmadan oluşturduğu gözükür.


Bu işlemin benzerlerinin shell üzerinden de aşağıdaki şekilde yapılabilir.



umask -S ile oluşturulacak dosyaların hangi haklarla oluşturulacağını u(ser), g(roup), o(ther) belirtir.

C'de gets fonksiyonunun implementasyonu

10:44

Standart gets fonksiyonu EOF veya new line("\n") karakteri görene kadar stdin dosyasından okuma yapar ve bu okunan iki karakterden gelen herhangi birinin yerine "\0" karakteri  ile yer değiştirir. gets fonksiyonu parametre olarak aldığı char * adresinden başlayarak içini doldurur ve başlangıç adresini geri dönüş değeri olarak verir. gets fonksiyonunu getchar kullanılarak yazmak mümkündür.Biz bu implementasyonu yaparak gets fonksiyonunu daha iyi anlamış oluruz. ( getchar fonksiyonu stdin'inden tek bir karakter okuma işlemi yapar. )


Yukarıdaki mygetsv1 versiyonunda while döngüsü ile tek tek karakter okuması yapar ve gelen karakter new line veya EOF karakteri ise döngüden çıkmaktadır.  "\n" ve EOF karakterlerine okuma yapar yani stdin' den alır ama bunları diziye koymaz onun yerine "\0" yani null karakter yerleştirmektedir.

Eğer diziye hiç atama yapılmamış ve gelen karakter EOF ise NULL geri dönüş yapmaktadır aksi halde üzerinde işlem yapılan dizinin başlangıç adresini geri döndürür.



mygetsv2'de ise aynı algoritma for döngüsüyle implemente edilmiştir.



main fonksiyonu ise mygets fonksiyonlarının geri dönüş değeri NULL olana kadar okuma yapar ve ekrana bastırır. Fonksiyonun çalıştırırsak aşağıdaki gibi düzgün çalıştığı görülebilir.



C'de opendir-readdir-closedir Fonksiyonları



  • opendir: Dosya açma
  • readdir: Dosya okuma
  • closedir: Dosya kapama


Öncelikler Linux sistemlerde (Sistem programlamada) dosya kavramı normal dosyalar ve dizinleri de içerecek şekilde kullanılmaktadır. Basit bir klasör listeleme programı aşağıdaki gibi yazılacaktır:



opendir ile dosya açılır ardından readdir ile içinde bulunan dosyalar okunur.


readdir fonksiyonunun geri dönüş değeri struct dirent pointer türündendir. 


Dosyaları listelemede filtreleme yapmak istersek aşağıdaki örnekten faydalanılabilir.


Dosyaların isimlerine ve diğer bilgilerine ent->d_name ile ulaşılır. struct dirent içinde başka bir çok bilgi bulunmaktadır. istediğimiz bilgileri ekrana yazdırabiliriz.

Bizim programın çıktısı aşağıdaki gibi olmuştur:



Sistemdeki Sürücüleri Listeleme

05:45

Windows işletim sisteminde C programlama dili kullanılarak nasıl sisteme takılı olan sürücüleri elde edebiliriz? Bu sorunun çözümü windowsta bulunan GetLogicalDriveStrings fonksiyonunu kullanmaktır. Bu fonksiyonun nasıl kullanılacağı aşağıdaki gibidir:



Windows'ta Winpcap (Packet Capture Library) Kullanımı

11:19 , ,

Winpcap kütüphanesi windows ve Linux/Unix platformlar için yazılmış bir "packet capture library" sidir. Ünlü wireshark programı bu kütüphanenin üzerine bina edilmiştir. Bu kütüphaneyi windows'ta kullanarak uygulamalar geliştirmek için önce yapılması gerekenler sırasıyla aşağıdaki gibidir:


  • ilk önce http://www.winpcap.org/devel.htm adresinden developer paketinin indirilmesi gerekmektedir. 


  • Ardından Visual Studio'da include library klasörünü ve linker için lib klasörlerinin yerinin gösterilmesi ve preprocessor'e bununla ayar girilmesi gerekmektedir.


Additional Include Directories:  (Başlık Dosyalarının eklenmesi)


Additional Library Directories: (Kütüphanelerin eklenmesi)



Additional Dependencies: (Ön işlemci kütüphanesinin eklenmesi)


Preprocessor Definitions