C
Özet - Hata yönetimi
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.
Örnek çözümü göster
#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");
}
Kendini test et
-
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
Cevabı göster
perror ile hatayı yazdır ve çık — perror hem bağlam hem nedeni stderr'e yazar; çıkış güvenlidir.
-
Araçları amacına eşle
- errno
- Hata kodu
- perror
- stderr mesajı
- strerror
- Hata dizesi
- assert
- Önkoşul denetimi
Sıradaki ders: Header ve kaynak