BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C örnek kodlar > c_ornek00013

C örnek kodlar

Dosya işlemlerinde ara bellek kullanımı

Aşağıdaki program, okuma ve yazma modunda (w+) 2 adet dosya açar. Her iki dosya için setbuf() fonksiyonu ile 1024 byte uzunluğunda birer ara bellek tanımladıktan sonra, fputs() fonksiyonu ile birer karakter dizisi yazar. Ancak yazma işlemi ara bellek yöntemi ile yapıldığından ara bellek içerikleri doldurulur ancak dosyalara fiziksel olarak bir değer yazılmaz. Ara bellek içeriklerini dosyalara yazmak amacıyla, ilk dosya için fflush() fonksiyonu ikinci dosya için fclose() fonksiyonu ile kapatma işlemi uygulanır. Daha sonra, her iki dosya içeriği tekrar ekrana yazılır.


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp1, *fp2, *fp3;
    char cdizi1[1024], cdizi2[1024];
    char gdizi[40];

    if ((fp1 = fopen ("dosya1.txt", "w+")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }

    if ((fp2 = fopen ("dosya2.txt", "w+")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }

    setbuf (fp1, cdizi1);
    setbuf (fp2, cdizi2);

    fputs("Bilgisayar", fp1);
    fputs("Programlama", fp2);

    printf("cdizi1 ara bellek içeriği: %s\n", cdizi1);
    printf("cdizi2 ara bellek içeriği: %s\n", cdizi2);

    /* dosya1.txt içeriğini okuma ve ekrana yazma */
    if ((fp3 = fopen ("dosya1.txt", "r")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }
	printf("dosya1.txt içeriği: %s\n", fgets(gdizi, 40, fp3) != NULL ? gdizi : "");

    /* dosya2.txt içeriğini okuma ve ekrana yazma */
    if (freopen("dosya2.txt", "r", fp3) == NULL) {
        printf("FILE dosya değişimi gerçekleşmedi!\n");
        exit(1);
    }
    printf("dosya2.txt içeriği: %s\n", fgets(gdizi, 40, fp3) != NULL ? gdizi : "");

    fclose(fp3);

    fflush(fp1); /* Ara belleği dosya1.txt dosyasına yazar. */
    fclose(fp2); /* Ara belleği dosya2.txt dosyasına yazar. */

    /* Dosya içeriklerini tekrar okuma ve yazma */

    /* dosya1.txt içeriğini okuma ve ekrana yazma */
    if ((fp3 = fopen ("dosya1.txt", "r")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }
    printf("dosya1.txt içeriği: %s\n", fgets(gdizi, 40, fp3) != NULL ? gdizi : "");

    /* dosya2.txt içeriğini okuma ve ekrana yazma */
    if (freopen("dosya2.txt", "r", fp3) == NULL) {
        printf("FILE dosya değişimi gerçekleşmedi!\n");
        exit(1);
    }
    printf("dosya2.txt içeriği: %s\n", fgets(gdizi, 40, fp3) != NULL ? gdizi : "");

    fclose(fp1);
    fclose(fp2);
    fclose(fp3);

    return 0;
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

cdizi1 ara bellek içeriği: Bilgisayar
cdizi2 ara bellek içeriği: Programlama
dosya1.txt içeriği: 
dosya2.txt içeriği: 
dosya1.txt içeriği: Bilgisayar
dosya2.txt içeriği: Programlama