Hi Community,
ich habe vor einiger Zeit einen kleinen Daemon in PHP (CLI) geschrieben der verschiedene Module hat. Diese Module erledigen
dann
Aufgaben zu bestimmten Zeiten oder Events. Jetzt würde ich den Daemon zu Übungszwecken (und weil C Performanter ist) gerne in C schreiben (C kennen lernen).
Mein Problem: Ich habe keine Ahnung wie ich Module in C realisieren kann/soll.
Hier mal meine derzeitige Wunschvorstellung (wie viele, hoffe auch ich, dass ich mich verständlich ausdrücke :)):
1. Der Daemon startet
Wenn der Daemon startet soll aus einer Configdatei (/etc/meindaemon/meindaemon.cf) ausgelesen werden, was für Module alle mit "geladen" werden sollen. Die verfügbaren Module liegen dann in einem Ordner (/pfad/zu/module.d).
2. Initialisierung
Es wird ein Array aufgebaut in dem steht, welches Modul wann ausgeführt werden soll. Das sollte noch das kleinere Problem darstellen.
3. Module (parallel) ausführen
Mittels fork() will ich die Module in einem Childprozess (das mache ich auch in PHP schon so, auch wenn PHP nur Single-Threaded ist... - no comment) starten. Was der Childprozess dann macht ist mir aus Sicht des Daemons schnuppe. Der soll sofort das nächste Modul starten können.
Das Modul bekommt als Fork aber schon alle nötigen Informationen (Logindaten für DB und solche Sachen) mit.
Jetzt stehe ich vor der Frage: Wie programmiere ich mit C module?
Dazu eine kleine Info, die euch evtl. meinen aktuellen Wissenstand erklärt:
In PHP habe ich beim Start des Daemons einfach alle Module (extra PHP-Dateien) einmal eingebunden. In diesen PHP-Dateien mussten zu dem Modul eine gleichnamige Funktion vorhanden sein (mod_modulname()). Dadurch hatte ich den Vorteil, dass zur Laufzeit bereits alles kompiliert war (fällt bei C natürlich weg).
4. Was ich definitiv möchte
Soo, was will der Threadersteller überhaupt am Ende haben:
Die Syntax ist mir aus der Sprachfamilie (Java, PHP, ...) bekannt. Gewisse Grundprinzipien sind mir auch schon bekannt, da ich das eine oder andere kleine Tool in C geschrieben habe.
Dazu kommen natürlich noch die allgemeine Programmiererfahrung und Programmierlogik - ich bin kein blutiger Anfänger.
Ich hoffe...
...ihr könnt mir mal die eine oder andere Architektur (verständlich) erklären und dazu ein paar Zeilen schreiben warum ihr das so und nicht anders machen würdet und wo es evtl. Probleme geben könnte.
Grüße,
Erasel
ich habe vor einiger Zeit einen kleinen Daemon in PHP (CLI) geschrieben der verschiedene Module hat. Diese Module erledigen
dann
Aufgaben zu bestimmten Zeiten oder Events. Jetzt würde ich den Daemon zu Übungszwecken (und weil C Performanter ist) gerne in C schreiben (C kennen lernen).
Mein Problem: Ich habe keine Ahnung wie ich Module in C realisieren kann/soll.
Hier mal meine derzeitige Wunschvorstellung (wie viele, hoffe auch ich, dass ich mich verständlich ausdrücke :)):
1. Der Daemon startet
Wenn der Daemon startet soll aus einer Configdatei (/etc/meindaemon/meindaemon.cf) ausgelesen werden, was für Module alle mit "geladen" werden sollen. Die verfügbaren Module liegen dann in einem Ordner (/pfad/zu/module.d).
2. Initialisierung
Es wird ein Array aufgebaut in dem steht, welches Modul wann ausgeführt werden soll. Das sollte noch das kleinere Problem darstellen.
3. Module (parallel) ausführen
Mittels fork() will ich die Module in einem Childprozess (das mache ich auch in PHP schon so, auch wenn PHP nur Single-Threaded ist... - no comment) starten. Was der Childprozess dann macht ist mir aus Sicht des Daemons schnuppe. Der soll sofort das nächste Modul starten können.
Das Modul bekommt als Fork aber schon alle nötigen Informationen (Logindaten für DB und solche Sachen) mit.
Jetzt stehe ich vor der Frage: Wie programmiere ich mit C module?
Dazu eine kleine Info, die euch evtl. meinen aktuellen Wissenstand erklärt:
In PHP habe ich beim Start des Daemons einfach alle Module (extra PHP-Dateien) einmal eingebunden. In diesen PHP-Dateien mussten zu dem Modul eine gleichnamige Funktion vorhanden sein (mod_modulname()). Dadurch hatte ich den Vorteil, dass zur Laufzeit bereits alles kompiliert war (fällt bei C natürlich weg).
4. Was ich definitiv möchte
Soo, was will der Threadersteller überhaupt am Ende haben:
- Ich will am Ende einen Daemon, der unabhängig von Modulen läuft. (ohne den Daemon neu zu kompilieren Module hinzufügen oder entfernen)
- Ich will, dass ich Module unabhängig vom Daemon ausliefern kann (die Software will ich später in ein RPM-Paket packen)
- Ich habe keine Ahnung - Aber, wenn möglich, will ich nicht, dass der Daemon syscalls machen muss um ein Modul zu starten.
Die Syntax ist mir aus der Sprachfamilie (Java, PHP, ...) bekannt. Gewisse Grundprinzipien sind mir auch schon bekannt, da ich das eine oder andere kleine Tool in C geschrieben habe.
Dazu kommen natürlich noch die allgemeine Programmiererfahrung und Programmierlogik - ich bin kein blutiger Anfänger.
Ich hoffe...
...ihr könnt mir mal die eine oder andere Architektur (verständlich) erklären und dazu ein paar Zeilen schreiben warum ihr das so und nicht anders machen würdet und wo es evtl. Probleme geben könnte.
Grüße,
Erasel
My lovely mister singing club...