CodeBlanks Logo Icon CodeBlanks

fclose

  • C kursu
  • Orta seviye
  • Ders 50/116
  • 5 dk

fclose ile dosyayı kapatmayı öğrenirsin.

fclose

fclose açık bir dosyayı kapatır. Kapatırken tamponu boşaltır (flush); yani yazılmamış veriyi diske yazar. Bu, veri kaybını önler.

Örnek: FILE *f = fopen("x.txt", "w"); fprintf(f, "veri"); fclose(f);. fclose çağrılmazsa, fprintf'in yazdığı veri tamponda kalabilir ve diske yazılmayabilir. Program sonunda dosyalar otomatik kapanır ama bu güvenilir değildir; özellikle uzun süreli programlarda. Her fopen için bir fclose eşleştirmek, sağlam C kodunun temel ilkesidir.

Kaynak sızıntısı

Dosyaları kapatmamak kaynak sızıntısı (resource leak) yaratır. Her açık dosya bir dosya tanıtıcısı (file descriptor) kullanır; bunların sayısı sınırlıdır. Uzun süreli programlarda sızıntı, dosya açma başarısızlıklarına yol açar.

Örnek: bir sunucu her istekte dosya açıp kapatmazsa, bir süre sonra fopen NULL dönmeye başlar. Bu yüzden fclose çağırmak bir tercih değil zorunluluktur. fflush(f) ise tamponu boşaltır ama dosyayı açık tutar; bu, dosyaya ara sıra yazmak istediğinizde kullanışlıdır. Sağlam kod, her iki fonksiyonu de bilinçli kullanır.

Uygulama Yaz, kapat, yeniden aç ve oku

FILE *f = fopen("log.txt", "w"); ile aç (NULL denetle). fprintf(f, "Tamam\n"); ile yaz, fclose(f); ile kapat. f = fopen("log.txt", "r"); ile yeniden aç (NULL denetle). char line[64]; tanımla; fgets(line, sizeof(line), f); ile oku. fclose(f);. printf("Okundu: %s", line); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>

// fopen ile log.txt'yi yazma modunda aç
// fprintf ile bir satır yaz, fclose ile kapat
// okuma modunda yeniden aç, fgets ile oku, fclose
// printf ile okunanı yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
    FILE *f = fopen("log.txt", "w");
    if (f == NULL) return 1;
    fprintf(f, "Tamam\n");
    fclose(f);

    f = fopen("log.txt", "r");
    if (f == NULL) return 1;
    char line[64];
    fgets(line, sizeof(line), f);
    fclose(f);

    printf("Okundu: %s", line);
    return 0;
}

Beklenen çıktı

Okundu: Tamam

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Dosyaları neden kapatmalıyız?

  • Daha hızlı çalışır
  • Derleyici ister
  • Bellek artar
  • Tamponu boşaltır ve kaynak bırakır Doğru cevap

Açıklama: fclose tamponu boşaltır ve dosya kaynaklarını bırakır.

2 fclose kavramlarını eşle

Kavram Anlamı
fclose(f) Dosyayı kapatma
fflush(f) Tamponu boşaltma
buffer Tampon
resource leak Kaynak sızıntısı

3 fclose çağrısını tamamla

Soru
FILE *f = fopen("x.txt", "w");
____(f);
Cevap
FILE *f = fopen("x.txt", "w");
fclose(f);

Açıklama: fclose(f) dosyayı kapatır ve tamponu boşaltır.

Orta seviye bölümündeki tüm dersler