CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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ı

Soru
const char *e = ____;
Cevap
const char *e = dlerror();

Açıklama: dlerror() son hata iletisini verir.

İleri seviye bölümündeki tüm dersler