dlerror
- C kursu
- İleri seviye
- Ders 52/83
- 5 dk
dlerror ile hata yönetimini öğrenirsin.
dlerror nedir?
dlerror, son dlopen, dlsym veya dlclose çağrısının hata iletisini verir. Hata yoksa NULL döner. Çağrıldığında hata durumunu temizler; bu yüzden arka arkaya iki çağrı yapmamalısın.
Doğru desen: önce dlerror() ile eski hatayı temizle, sonra işlemi yap, sonra const char *e = dlerror(); ile yeni hatayı al. e NULL ise işlem başarılıdır; değilse e hata iletisidir. Test için bilerek hatalı bir yol yükleyip hatayı yakalayabilirsin; çıktı printf("hata yakalandı\n") ile deterministiktir.
Hata yakalama deseni
Hata yakalama için: dlerror(); ile eski hatayı temizle. void *h = dlopen("/yok/bir/yer.so", RTLD_LAZY); ile bilerek hatalı yol yükle. if (!h) { const char *e = dlerror(); } ile hatayı al. Hata iletisi e'dedir.
Test için printf("hata yakalandı\n") yazdırmak yeterlidir. Gerçek uygulamada e'yi yazdırır veya loglarsın. Çıktı deterministiktir çünkü printf her zaman aynı sabiti yazdırır. Hata iletisinin kendisi ortam bağımlıdır; bu yüzden onu yazdırmaktan kaçınırız.
Uygulama Hata yakala
dlerror(); ile eski hatayı temizle. void *h = dlopen("/yok/bir/yer.so", RTLD_LAZY); ile hatalı yol yükle. if (!h) { const char *e = dlerror(); (void)e; } ile hatayı al. printf("hata yakalandı\n"); ile yazdır.
Başlangıç kodu
#include <stdio.h>
#include <dlfcn.h>
// eski hatayı temizle
// hatalı yolu yükle
// hatayı al ve sabit yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <dlfcn.h>
int main(void) {
dlerror();
void *h = dlopen("/yok/bir/yer.so", RTLD_LAZY);
if (!h) {
const char *e = dlerror();
(void)e;
}
printf("hata yakalandı\n");
return 0;
}Beklenen çıktı
hata yakalandı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 dlerror hata yokken ne döner?
- Boş bellek
- Hata kodu
- Dosya tanıtıcı
- NULL Doğru cevap
Açıklama: dlerror hata yoksa NULL döner.
2 dlerror parçalarını eşle
| Kavram | Anlamı |
|---|---|
dlerror |
Hata iletisi |
NULL |
Hata yok |
temizle |
Önce çağır |
const char * |
Dönüş türü |
3 dlerror çağrısı
const char *e = ____;
const char *e = dlerror();
Açıklama: dlerror() son hata iletisini verir.