CodeBlanks Logo Icon CodeBlanks

Plugin sistemi

  • C kursu
  • İleri seviye
  • Ders 53/83
  • 5 dk

dlopen ile plugin sistemi kurmayı öğrenirsin.

Plugin sistemi

Plugin sistemi, ana programı yeniden derlemeden özellik eklenebilen mimaridir. dlopen ile eklenti dosyasını yükler, dlsym ile eklentinin giriş fonksiyonunu alır, fonksiyon işaretçisiyle çağırırsın. İş bitince dlclose ile kapatırsın.

Eklenti yazarı, eklenti dosyasında bilinen bir isimle fonksiyon dışa aktarır; örneğin void plugin_init(void). Ana program bu ismi dlsym ile arar. İşaretçi türü typedef void (*PluginFn)(void); ile tanımlanır. Test için eklenti yerine ana programın sembollerini kullanabilirsin; çıktı deterministiktir.

Plugin çağırma deseni

Tipik akış: typedef void (*PluginFn)(void); ile tür tanımla. void *h = dlopen(NULL, RTLD_LAZY); ile yükle. PluginFn fn = (PluginFn)dlsym(h, "printf"); ile sembolü al ve cast et. (void)fn; ile kullanım göster. printf("plugin yüklendi\n"); ile yazdır. if (h) dlclose(h); ile kapat.

Gerçek uygulamada fn() ile eklenti fonksiyonu çağrılır; ama test için yalnızca yüklemeyi göstermek yeterlidir. Çıktı deterministiktir. Eklenti dosyası yoksa dlerror ile hata yakalayıp alternatif yola geçebilirsin.

Uygulama Plugin yükle

typedef void (*PluginFn)(void); ile tür tanımla. void *h = dlopen(NULL, RTLD_LAZY); ile yükle. PluginFn fn = (PluginFn)dlsym(h, "printf"); ile sembolü al. (void)fn; ile kullanım göster. printf("plugin yüklendi\n"); ile yazdır. if (h) dlclose(h); ile kapat.

Başlangıç kodu

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

// plugin türünü tanımla
// kütüphaneyi yükle ve sembolü al
// yazdır ve kapat

int main(void) {
    return 0;
}

Örnek çözüm

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

typedef void (*PluginFn)(void);

int main(void) {
    void *h = dlopen(NULL, RTLD_LAZY);
    PluginFn fn = (PluginFn)dlsym(h, "printf");
    (void)fn;
    printf("plugin yüklendi\n");
    if (h) dlclose(h);
    return 0;
}

Beklenen çıktı

plugin yüklendi

Soru ve cevaplar

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

1 Plugin parçalarını eşle

Kavram Anlamı
dlopen Eklenti yükler
dlsym Giriş alır
PluginFn İşaretçi türü
dlclose Kapatır

2 Plugin giriş fonksiyonu hangi türle tanımlanır?

  • PluginFn Doğru cevap
  • int
  • char
  • void

Açıklama: PluginFn, plugin giriş fonksiyonunun işaretçi türüdür.

3 Plugin türü

Soru
typedef void (*____)(void);
Cevap
typedef void (*PluginFn)(void);

Açıklama: PluginFn, plugin fonksiyon işaretçisi türüdür.

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