CodeBlanks Logo Icon CodeBlanks

Özet - Hata yönetimi

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

errno, perror ve assert'i birleştirerek sağlam bir dosya okuyucu yazarsın.

Özet - Hata yönetimi

Bu grupta dört aracı öğrendin: errno hata kodu, perror stderr mesajı, strerror hata dizesi ve assert önkoşul denetimi. Birlikte sağlam bir dosya okuyucu yazacaksın.

Desen: fopen ile dosyayı aç, NULL dönerse perror ile hatayı yazdır ve çık. errno'yu sıfırla; çağrı sonrası kontrol et. assert ile parametre önkoşullarını denetle. Bu desen, gerçek C projelerinde standarttır; her çağrı denetlenir, her hata bildirilir.

Sağlam dosya okuyucu

Sağlam bir dosya okuyucu üç katmanlı denetim yapar: birincil hatayı dönüş değeriyle yakala (fopen NULL), ikincil nedeni errno ve strerror ile bildir, üçüncü önkoşulları assert ile doğrula. Bu sayede hem kullanıcıya anlamlı mesaj verir hem de programcı hatalarını erken yakalar.

Aşağıdaki örnekte read_first_line fonksiyonu dosyayı açar, ilk satırı okur ve hataları perror ile bildirir. assert(filename != NULL) önkoşulu programcı hatasını yakalar. Bu deseni taklit ederek kendi dosya yardımcılarını yazabilirsin.

Uygulama Sağlam dosya okuyucu yaz

<stdio.h>, <errno.h> ve <assert.h> başlıklarını ekle. int read_first_line(const char *filename) fonksiyonu yaz: assert(filename != NULL); ile önkoşulu denetle, FILE *f = fopen(filename, "r"); ile aç, if (f == NULL) { perror("açılamadı"); return 1; } ile hatayı bildir. char buf[64]; fgets(buf, sizeof(buf), f); ile oku, printf("%s", buf); ile yazdır, fclose(f); ile kapat ve return 0; döndür. main içinde return read_first_line("yok.txt"); çağır.

Başlangıç kodu

main.c
#include <stdio.h>
// errno.h ve assert.h başlıklarını ekle

// read_first_line: assert, fopen, perror, fgets, printf, fclose

int main(void) {
    return read_first_line("yok.txt");
}

Örnek çözüm

main.c
#include <stdio.h>
#include <errno.h>
#include <assert.h>

int read_first_line(const char *filename) {
    assert(filename != NULL);
    FILE *f = fopen(filename, "r");
    if (f == NULL) {
        perror("açılamadı");
        return 1;
    }
    char buf[64];
    fgets(buf, sizeof(buf), f);
    printf("%s", buf);
    fclose(f);
    return 0;
}

int main(void) {
    return read_first_line("yok.txt");
}

Beklenen çıktı

açılamadı: No such file or directory

Soru ve cevaplar

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

1 fopen NULL dönerse hangisi en iyi adım?

  • Yoksay ve devam et
  • assert çağır
  • printf ile errno yazdır
  • perror ile hatayı yazdır ve çık Doğru cevap

Açıklama: perror hem bağlam hem nedeni stderr'e yazar; çıkış güvenlidir.

2 Araçları amacına eşle

Kavram Anlamı
errno Hata kodu
perror stderr mesajı
strerror Hata dizesi
assert Önkoşul denetimi

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