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

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <stdio.h> > fopen

fopen() fonksiyonu

Bildirim

FILE* fopen(const char *filename, const char *mode);

FILE* fopen(const char *restrict filename, const char *restrict mode); (C99)

errno_t fopen_s(FILE *restrict *restrict streamptr, const char *restrict filename, const char *restrict mode); (C11)

Açıklama

Filename parametresi ile gösterilen dosyayı mode parametresi ile gösterilen dosya erişim modunda açar ve bu dosyaya ait FILE dosya akışına bir işaretçi geri döndürür.

Açılan dosya ile ilgili tüm işlemler bu fonksiyon tarafından geri döndürülen FILE işaretçisi ile yapılır.

Fopen_s() fonksiyonu aynı işlemleri yapar, sadece açılan dosyaya ait FILE dosya akış işaretçisi streamptr parametresine yazılır. Çalışma zamanında aşağıdaki hatalar tespit edildiğinde, yüklenmiş olan kısıtlayıcı işlem fonksiyonu çağrılır:

  • Streamptr parametresi NULL bir işaretçi ise,
  • Filename parametresi NULL bir işaretçi ise,
  • Mode parametresi NULL bir işaretçi ise.

Parametreler

filename: Açılarak dosya akışına bağlanacak dosya adıdır.

mode: Dosya erişim modunu gösteren karakter dizisidir.

streamptr: Fonksiyonun sonucu aktardığı işaretçiyi gösteren bir işaretçidir.

Mod Anlamı
r Okuma için bir metin dosyası açar. Dosya mevcut olmalıdır.
w Yazma için bir metin dosyası oluşturur. Aynı isimde bir dosya zaten mevcut ise, içeriği silinir.
a Bir metin dosyasını ekleme yapmak için açar. Dosya yok ise oluşturulur.
r+ Okuma ve yazma için bir metin dosyası açar. Dosya mevcut olmalıdır.
w+ Okuma ve yazma için bir metin dosyası oluşturur.
a+ Okuma ve ekleme için bir metin dosyası açar.
rb Okuma için bir ikili sistem dosyası açar. Dosya mevcut olmalıdır.
wb Yazma için bir ikili sistem dosyası oluşturur. Aynı isimde bir dosya zaten mevcut ise, içeriği silinir.
ab Bir ikili sistem dosyasını ekleme yapmak için açar. Dosya yok ise oluşturulur.
r+b Okuma ve yazma için bir ikili sistem dosyası açar. Dosya mevcut olmalıdır.
w+b Okuma ve yazma için bir ikili sistem dosyası oluşturur.
a+b Okuma ve ekleme için bir ikili sistem dosyası açar.

Dönüş değeri

Fopen() fonksiyonu, eğer dosya başarılı bir şekilde açılırsa, FILE değişken değerine bir işaretçi döndürür. Eğer bir hata oluşursa, NULL bir işaretçi döndürülür ve errno global değişkeni hatayı göstermek üzere ayarlanır.

Fopen_s() fonksiyonu, başarılı bir şekilde çalışırsa, 0 değeri geri döndürür ve streamptr parametresine yeni dosya akışını gösteren işaretçiyi yazar. Eğer bir hata oluşursa, sıfır olmayan bir hata kodu döndürür streamptr parametresine NULL bir işaretçi yazar.

Örnek


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

int main(void)
{
    FILE *fp;
    char cdizi[50];

    /* Dosyayı oluşturma ve yazma için açma */
    if ((fp = fopen ("dosya.txt", "w")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }
    fputs("Bilgisayar", fp);
    fclose(fp);

    /* Dosyayı sadece okuma için açma */
    if ((fp = fopen ("dosya.txt", "r")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }
    fgets(cdizi, 50, fp);
    printf("%s\n", cdizi);
    fclose(fp);

    /* Dosyayı sonuna ekleme yapmak için açma */
    if ((fp = fopen ("dosya.txt", "a")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }
    fputs(" programlama", fp);
    fclose(fp);

    /* Dosyayı sadece okuma için açma */
    if ((fp = fopen ("dosya.txt", "r")) == NULL) {
         printf("Dosya açma hatası!");
         exit(1);
    }
    fgets(cdizi, 50, fp);
    printf("%s\n", cdizi);

    fclose(fp);

    return 0;
}

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

Bilgisayar
Bilgisayar programlama

Yukarıdaki program, yazma modunda (w) bir dosya oluşturarak açar. Açtığı dosyaya fputs() fonksiyonu ile "Bilgisayar" karakter dizisini yazar. Dosyayı kapatıp bu kez okuma modunda (r) açarak fgets() fonksiyonu ile okuduğu karakter dizisini ekrana yazar. Dosyayı kapatıp bu kez ekleme (a) modunda açarak fputs() fonksiyonu ile " programlama" karakter dizisini dosya sonuna ekler. Dosyayı kapatıp tekrar okuma modunda açarak fgets() fonksiyonu ile okuduğu karakter dizisini ekrana yazar.