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
#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
#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ü
typedef void (*____)(void);
typedef void (*PluginFn)(void);
Açıklama: PluginFn, plugin fonksiyon işaretçisi türüdür.