C
fclose
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
Dosyaları neden kapatmalıyız?
- Daha hızlı çalışır
- Derleyici ister
- Bellek artar
- Tamponu boşaltır ve kaynak bırakır
Cevabı göster
Tamponu boşaltır ve kaynak bırakır — fclose tamponu boşaltır ve dosya kaynaklarını bırakır.
-
fclose kavramlarını eşle
- fclose(f)
- Dosyayı kapatma
- fflush(f)
- Tamponu boşaltma
- buffer
- Tampon
- resource leak
- Kaynak sızıntısı
-
fclose çağrısını tamamla
FILE *f = fopen("x.txt", "w");
____(f);
Cevabı göster
FILE *f = fopen("x.txt", "w");
fclose(f);
Sıradaki ders: fread ve fwrite