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
#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
#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
FILE *f = fopen("x.txt", "w");
____(f);
FILE *f = fopen("x.txt", "w");
fclose(f);
Açıklama: fclose(f) dosyayı kapatır ve tamponu boşaltır.