fread(), fwrite()

Kategori: C , 30 Haziran 2019 , JanFranco


fread ve fwrite fonksiyonları ile, dosyalardan binary okuma yapabiliriz. Fonksiyon prototipleri:


size_t fread(void *p, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *p, size_t size, size_t nmemb, FILE *stream);
Binary okuma yapmak için fopen fonksiyonunu kullanıp, mod kısmına b yazamaz mıydık diyebilirsiniz. Bazı dosyalar binary şeklinde açılmaz ve bu dosyalar diğer fonksiyonlarla binary şeklinde okunamaz. Bunu yapabilmek için fread ve fwrite fonksiyonlarını kullanacağız. Binary okumanın avantajı ne diye sorarsanız, şöyle bir örnek verebiliriz: 20 integer değerimiz olsun ve bunları bir dosyada saklamak isteyelim. Bunu örneğin fprintf ile yapabiliriz. Ancak fprintf okuduğu integer değerleri direk olarak string'e çevirecek ve öyle yazacaktır. "12345678" şeklinde bir sayımız olsun. Bu sayı integer haldeyken 4 byte yer kaplar. Stringe çevrildiğinde 8 byte yer kaplar. Bu tarz performans kayıplarını engellemek için binary modda yazabiliriz. Örneğe geçmeden önce son olarak fonksiyon prototipinde yer alan fonksiyon return typelardan bahsedelim. Bu iki fonksiyon hatasız çalışması halinde, başarılı bir şekilde yazdığı veya okuduğu verilerin sayısını döner. Şimdi örneğe geçebiliriz:

int main(){

    int i;
    int n[10];

    FILE *fp;
    fp = fopen("binarynumbers.dat", "rb");

    fread(n, sizeof(int), 10, fp);
    fclose(fp);

    for(i = 0; i < 10; i++)
        printf("n[%d] == %d\n", i, n[i]);
    
    return 0;
}
fread fonksiyonunun ilk parametresi, okuduğu verileri nereye yazacağıdır. Burada n arrayine yazdık. İkinci parametresi, okuyacağı verilerin boyutudur. Burada integer değerler okuyacağımızdan, sizeof(int) olarak belirledik. Üçüncü parametresi kaç değer okuyacağıdır. Dördüncü parametresi file pointer alır. Bir de fwrite ile örnek yapalım:

int main(){

    int i;
    int r[10];
    FILE *fp;

    for(i = 0; i < 10; i++) {
        r[i] = rand();
    }

    fp = fopen("binaryfile.dat", "wb");
    fwrite(r, sizeof(int), 10, fp);
    fclose(fp);
    return 0;
}
Burada fwrite fonksiyonun ilk parametresi, verileri nereden okuyacağıdır. İkinci parametresi verilerin boyutudur. Üçüncü parametresi kaç veri olduğudur. Dördüncü parametresi file pointer alır.


Sonraki Yazı: feof(), ferror(), perror(), clearerr()
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın