CodeBlanks Logo Icon CodeBlanks

errno

  • C kursu
  • Orta seviye
  • Ders 53/116
  • 4 dk

errno ile hata kodlarını öğrenirsin.

errno global değişkeni

C dilinde hataları izlemek için errno global değişkeni kullanılır. <errno.h> başlığını eklemen gerekir. errno bir hata kodu tutar; başarılı çağrılar onu sıfırlamaz, bu yüzden çağrıdan önce errno = 0; yazmak iyi bir alışkanlıktır.

Örnek: fopen NULL dönerse errno'ya bakarak nedenini öğrenebilirsin. Değerler EINVAL, ERANGE, ENOENT gibi sabitlerdir. errno bir int değil, genişleyebilen bir makrodur; bu yüzden adresini &errno ile alabilirsin.

Yaygın errno sabitleri

errno'nun aldığı değerler standart sabitlerdir. EINVAL geçersiz parametre, ERANGE sonuç aralık dışı, ENOENT böyle dosya yok, ENOMEM bellek yetersiz demektir.

Bu sabitleri if (errno == EINVAL) biçiminde test edersin. Sabitlerin sayısal değeri platforma göre değişir; bu yüzden her zaman isimleriyle karşılaştır. strerror ve perror bu kodları insan-okur metne çevirir; bir sonraki derste göreceğiz.

Uygulama errno'yu oku ve yazdır

<errno.h> ve <stdio.h> başlıklarını ekle. main içinde errno = 0; ile sıfırla, strtol("xyz", NULL, 10); çağrısını long v'ye ata, ardından printf("%d\n", errno); ile errno değerini yazdır. strtol sayı bulamayınca errno'yu değiştirmez; amaç errno'yu okumayı göstermek.

Başlangıç kodu

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

int main(void) {
    // errno'yu sıfırla
    // strtol ile "xyz" dizisini çevir
    // errno değerini yazdır
    return 0;
}

Örnek çözüm

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

int main(void) {
    errno = 0;
    long v = strtol("xyz", NULL, 10);
    printf("%d\n", errno);
    return 0;
}

Beklenen çıktı

0

Soru ve cevaplar

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

1 errno'nun değerini sıfırlamak için ne yapmalısın?

main.c
errno = 0;
result = strtol("abc", NULL, 10);
  • errno otomatik sıfırlanır
  • Çağrıdan sonra errno = 0; yaz
  • Çağrıdan önce errno = 0; yaz Doğru cevap
  • errno'yu sıfırlamaya gerek yoktur

Açıklama: Başarılı çağrılar errno'yu sıfırlamaz; çağrıdan önce elle sıfırlamak gerekir.

2 errno'yu çağrıdan önce sıfırla

Soru
errno = ____;
long v = strtol("abc", NULL, 10);
Cevap
errno = 0;
long v = strtol("abc", NULL, 10);

Açıklama: errno = 0; ile eski değeri temizlersin.

3 errno sabitlerini anlamına eşle

Kavram Anlamı
EINVAL Geçersiz parametre
ERANGE Sonuç aralık dışı
ENOENT Böyle dosya yok
ENOMEM Bellek yetersiz

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