Portál AbcLinuxu, 10. května 2025 05:25
Ahoj,
mam program napsany v C, jedna se o sitoveho demona, ktery dohled nad konkretni specifickou mnouzinou sluzeb.
Potreboval bych vsak mit moznost napsat doplnkove skripty(napr. v Perl), kteremu bych predal nejake informace (jedna se asi o 8 parametru, retezce a cisla), on by je vyhodnotill a vratil by mi odpoved(opet zpatky cca 3 promene, boolean, retezec a integer).
A druha otazka rovnou k tomuto, pokud bych chtel plugin ne ve forme scriptu, ale programu v C, jak toho dosahnu, to se udela nejaka fce v C, necham to zkompilovat do objecktu napr. neco.o , ale jak to pak pridam a provedu v tom jiz bezicim programu?
Diky vsem na nakopnuti dopredu ...
Zdravim,
ja osobne mam zkusenosti pouze s embeddingem Pythonu. Jeho pouziti je vcelku snadne, jednoduse se da i rozsirovat mnozina ceckovskych funkci volatelnych ze skriptu.
Vice informaci najdes treba tady:
Mozna je to ale jako chozeni s kanonem na vrabce - na to co potrebujes by mohlo stacit neco jednodusiho.
Co se tyce pluginu, na to se asi nejcasteji pouzivaji sdilene knihovny (*.so). Bezne jejich pouziti nahrazuje staticky linkovane knihovny (*.a), ale lze je nahravat volitelne za behu programu - to presne potrebujes.
Zkus si najit dokumentaci k funkcim dlopen(), dlsym() a dlclose().
Snad jsem te aspon trochu nasmeroval.
plugin_init() plugin_exit() plugin_get_functions_names() funkce1() funkce2() . . . funkceX()A ve vlastním programu používat dlopen(), dlerror(), dlclose() tak jak je popsáno třeba zde. Program který by používal tyto funkce se pak musí zkompilovat pomocí
gcc -rdynamic -o program program.c -ldl
(důležité je to -ldl). A plugin (tedy ten shared object) by se měl zkompilovat pomocí gcc -shared -nostartfiles -o plugin1 plugin1.c
moc dekuji, dlopen(), dlsym() a dlclose() je to co jsem hledal, dal uz si s tim poradim pres manual
Možná se Ti bude hodit článek: A Simple Loader Program for Plugins (dlopen, dlclose, dlsym, dlerror).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.