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
#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
#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?
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
errno = ____;
long v = strtol("abc", NULL, 10);
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 |