Wynton schrieb: (obwohl ich als Programmiersprachen-Noob davon ausgehe das man siginfo-ng zu 80% umschreiben dürfte.).
Problem ist Netzwerk (also HTTP) und der ganze Kram, den gibts in C nicht plattformunabhängig, ohne besondere Bibliothek. Und die Plugins selber müssen um an die Infos ranzukommen direkt Linux-Funktionen verwenden. Plugins muss man also so oder so auch für Windows neu schreiben.
Ansonsten dürfte man siginfo-ng ohne Plugins vermutlich mit einer POSIX-kompatiblen Umgebung wie cygwin unter Windows kompileren können. Unter OSX kompiliertes ja angeblich.
Blue-Fox schrieb: Was ich gut finden würde, wenn gandro mir verraten würde, wie das mit den Makefile krams ist, oder sonstige Implentierungen in siginfo-ng, damit ich mein Plug-In so implrntieren kann, wie ich mir das vorstelle.
Als Pluginentwickler brauchst du nicht an der Makefile rumzufummeln, lediglich wenn es dich interessiert, wie das intern läuft, aber dazu musst du so ne Makefile auch lesen könne, um das zu verstehen.
Kleines Beispiel-Plugin:
Code:
#include <stdio.h>
#include "../plugin.h"
#include "../siginfo-ng.h"
void myplugin_funktion(plugin_t *self) {
int variable = 42;
set_value(self, &variable, T_INTEGER);
}
void myplugin_init() {
register_plugin("MY_PLUGIN", myplugin_funktion);
}
Beachten:
#include "../plugin.h"
#include "../siginfo-ng.h"
Wird benötigt für die Funktionen und Datentypen die man als Plugin braucht. Dass man die
<stdio.h> einbinden muss, ist mehr ein Bug den ich gerade gefunden habe.
Wichtig: Der Dateiname (hier myplugin.c) muss auch in den Funktionen verwendet werden. Wenn du also im "plugins" Ordner eine "myplugin.c" erstellst, muss in dieser Datei eine Funktion
myplugin_init() vorhanden sein.
Diese Funktion wird beim Starten von siginfo-ng bei allen Plugins aufgerufen, in dieser Funktion meldest du deine "Hooks" an. Im obigen Beispiel soll beim Hook
"MY_PLUGIN" (in der Konfigurationsdatei dann
{MY_PLUGIN}) die Funktion myplugin_funktion bei jedem Update aufgerufen werden.
Die Funktion muss einen Parameter als Pointer von Typ
plugin_t sein. In diesem Beispiel, heisst der
self. Jetzt kannst du in der Funktion tun und lassen was du willst, das Resultat, welches am Ende in der Signatur angezeigt werden soll, gibst du dann über die Funktion
set_value(plugin_t *plugin, const void *value, type_t type) zurück.
Den Wert hinter dem Pointer
*value (in diesem Falle
&variable) kannst du danach wieder löschen/freigeben, er wird kopiert. Als Datentyp kannst du momentan Strings (
T_STRING), Ganzahlen (
T_INTEGER), Gleitpunktzahlen (
T_FLOAT)) oder lange Ganzzahlen (
T_LONG) zurückgeben.
Die fertige Datei kommt wie gesagt mit richtigem Dateinamen ins "plugins"-Verzeichnis. Danach machst du im Hauptverzeichnis (da wo die Makefile liegt) sicherheitshalber erstmal ein "make clean", danach ein "make config", wo du dein Plugin jetzt mit Y aktivieren kannst. Danach compilieren mit "make".