6 Mart 2017 Pazartesi

Genel Dosya Komutları

Bir dosyaya okuma ve yazma yapmak için ilk işlem dosyayı açmaktır.
Dosya açmak için fopen()
Kapatmak için fclose()
Bu fonksiyonlar stdio.h kütüphanesi içerisinde tanımlanmıştır.

Genel olarak dosya açma ve kapatma adımları şu şekildedir.

FILE *pDosya; /* dosya işaretçisi*/
pDosya = fopen(const char dosya_adı,
              const char mod);


fclose(pDosya);



FILE *pDosya; /* dosya işaretçisi*/

ifadesi, pDosya’nın FILE yapısını gösteren bir işaretçi olduğunu belirtmektedir.
C  programı, her dosyayı ayrı bir FILE yapısıyla yönetir.
Yazılımcı dosyaları kullanabilmek için FILE yapısının özelliklerini bilmelidir.


Dosya açma işlemi için kullanılan fopen() fonksiyonundaki mod değişkeni için değişkenler ve tanımları aşağıdaki tabloda belirtilmiştir.











Bir dosyaya erişmek ve üzerinde işlem yapabilmek için ise o dosyanın açılıp açılmadığını test etmek gerekir.




Örnek: Dosyaya Veri Yazma

Kaynak kod üzerinden uygulama
fprintf ve fscanf kullanımı

Dosyalara Giriş



Değişkenler ve diziler içinde depolanan veriler bellekte tutulurlar ve geçicidirler.
Bu türde veriler program sonlandığında bellekten kaybolurlar.
Dosyalar büyük miktarda veriyi kalıcı olarak tutmak için kullanılır.
Bilgisayarlar dosyaları ikincil depolama cihazlarında, özellikle de disk depolama cihazlarında tutarlar.

Dosya ve Akışlar (Stream)


C, her dosyayı basit olarak bitlerin ard arda geldiği bir akış olarak görür.
Her dosya ya dosya sonu belirteci (end-of-file) ya da sistemde yönetici veri yapısı tarafından belirlenmiş özel bir byte sayısı ile sonlanır.
Bir dosya açıldığında, dosya ile ilgili bir akış ilişkilendirilir. Program çalışmaya başladığında, üç dosya ve bu dosyalarla ilişkili akışlar;
standart giriş (standart input)
standart çıkış (standart output)
standart hata (standart error)



Akışlar, dosyalar ile program arasında haberleşme kanalları oluşturur. Örneğin, sta







Standart kütüphane, dosyalardan okuma yapmak ve dosyalara veri yazmak için bir çok fonksiyon sunmaktadır.
fgetc fonksiyonu, getchar gibi, dosyadan bir karakter okur.
fputc fonksiyonu, putchar gibi dosyadan okunan karakteri output olarak ortaya koyar.
fgets ve fputs fonksiyonları dosyadan bir satır okumak ya da dosyaya bir satır yazdırmak için kullanılır.

Veri Hiyerarşisi



Bir bilgisayardaki en küçük veri parçası 0 ya da 1 değerini alabilir.
Bunun sebebi, iki kararlı durum içeren elektronik cihazları üretmenin basit ve ekonomik olmasıdır.
Böyle veri parçalarına bit   (ikili basamak anlamına gelen binary digit teriminin kısaltmasıdır, basamak iki değerden birini alabilir) denir.
Bilgisayar devreleri, bir bitin değerini anlamak, bite değer yerleştirmek ve bit değerlerini tersine çevirmek (0 ise 1’e, 1 ise 0’a) gibi basit bit işlemlerini gerçekleştirirler.
Programcılar için bitler biçimindeki düşük seviyeli verilerle çalışmak oldukça zahmetlidir.
Bunun yerine, programcılar
rakamlar (yani 0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
harfler (yani A-Z, a-z) ve
özel semboller (örneğin $, @, %, &, *, ”, :, ? ve diğerleri )
formundaki verilerle çalışmayı tercih ederler.
Rakamlar, harfler ve özel semboller karakterler olarak bilinir.
Bilgisayarlar yalnızca 1 ve 0’ları işleyebildiğinden, bilgisayarın her karakter, 1 ve 0’ların değişik biçimde dizilişleriyle temsil edilir.
Yazılımcılar programlarını ve veri parçalarını karakterlerle yaratır ve bilgisayarlar da bu karakterleri, bitlerin dizilişleri biçiminde yönetir ve işlerler.

NULL İşaretçi


Bir işaretçinin bellekte herhangi bir adresi göstermesi, veya önceden göstermiş olduğu adres iptal edilmesi istenirse NULL sabiti kullanılır.
Bu sabit derleyicide ASCII karakter tablosunun ilk karakteridir ve '\0' ile sembolize edilir.


 int *ptr, a = 12;
          …
ptr = &a;     // ptr bellekte a değişkenin saklandığı yeri gösteriyor 
          …
ptr = NULL;   // ptr bellekte hiç bir hücreyi göstermiyor

*ptr = 8      // hata! NULL işaretçisinin gösterdiği yere bir değer                atanamaz


void Tipindeki İşaretçiler


void işaretçiler herhangi bir veri tipine ait olmayan işaretçilerdir.
Bu özelliğinden dolayı, void işaretçi genel işaretçi (generic pointer) olarak da adlandırılır.
void göstericiler, void anahtar sözcüğü ile bildirilir.

Örnek:
    void *adr;

Örnek: Fonksiyon İşaretçileri


Fonksiyon İşaretçileri


Fonksiyon işaretçileri, işaretçi (pointer) kavramının gücünü gösterin diğer bir uygulama alanıdır.
Dizilerde olduğu gibi, fonksiyon adları da sabit işaretçidir.
Fonksiyon kodlarının bellekte bir adreste tutulduğu şeklinde düşünebiliriz.
Fonksiyon işaretçisi basit olarak fonksiyon adının saklandığı bellek adresini tutan bir işaretçidir.
Fonksiyon işaretçileri sayesinde fonksiyonlar başka fonksiyonlara parametre olarak aktarılabilmektedirler.
Fonksiyonların bellekteki adresleri aşağıdaki kodlama kullanımıyla öğrenilebilir:

int f(int);     /* fonksiyon bildirimi */
int (*pf)(int); /*fonksiyon göstericisi bild.*/
pf = &f;        /*f'nin adresini pf'ye ata! */

Fonksiyon Geri Dönüş Değeri Olan İşaretçiler



Fonkiyonların geri dönüş değeri bir işaretçi olabilir.
Bu durumda fonksiyon bir değer değil adres döndürecek demektir.
Örnek:
Önce bir dizinin indisleri, dizi değerleri ve dizi elemanlarının adresleri ekrana basılacaktır.
Daha sonra, maxAdr(); fonksiyonu ile dizinin en büyük elemanının adresi döndürülür.


Örnek: Fonksiyon Geri Dönüş Değeri Olan İşaretçiler