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


C'de extern anahtar sözcüğü

11:21

Bir kaynak dosya içinde tanımlanan bir değişkene ya da işleve, yalnızca tanımlandığı kaynak dosya içinde değil, projeyi oluşturan diğer kaynak dosyalarda da erişilebiliyorsa, nesne ya da işlevin dış bağlantısı “external linkage” vardır denir.

Bir kaynak dosya içinde tanımlanan bir değişkene ya da işleve, yalnızca tanımlandığı kaynak dosya içinde erişilebiliyorsa, projeyi oluşturan diğer kaynak dosyalarda erişilemiyorsa, nesne ya da işlevin iç bağlantısı “internal linkage” vardır denir.

extern anahtar kelimesi derleyiciye değişkenin dışarıda tanımlandığını bildirmek için kullanılan bir keyword'tür. Compiler extern keyword'unu gördüğünde değişken için alan tahsisinde bulunmaz. 





Yukarıdaki a.c | b.c | c.c şeklinde üç c dosyası bulunmaktadır. b.c dosyası içinde g_x değişkeni bildirilmiş a.c ile c.c dosyalarında extern keyword'u ile dış bağlantıya ait g_x değişkeni kullanılmıştır.



eğer b.c dosyasında da int g_x bildirimi olmasaydı veya orada da extern g_x bildirilimi yapılsaydı compile aşamasında olmasada link aşamasında hata verecekti.



scanf fonksiyonunun türevleri [ scanf, sscanf, fscanf ]

10:58


scanf, sscanf, fscanf fonksiyonları okuma amaçlı kullanılan fonksiyonlardır. Kısaca her birine değinmek gerekirse:

scanf:

scanf stdin dosyasından formatlı okuma yapmak için kullanılan bir fonksiyondur.  

int scanf(const char *format, ...);




sscanf:

sscanf ise bir veri yapısından formatlı okuma yapmak için kullanılan bir fonksiyondur.

int sscanf(const char *str, const char *format, ...);



fscanf:

fscanf ise dosyadan formatlı okuma yapmak için kullanılan bir fonksiyondur.

int fscanf(FILE *stream, const char *format, ...);


ÖZET: scanf format bilgisini ve bu formata göre aldığı değerleri yazacağı adresi ister. fscanf ise dosyadan formatlı okuma yapmak için kullanılır. scanf'e ek olarak dosya handle değerini ister. sscanf ise dosya yerine string gibi bir veri yapısından formatlı okuma yapar.