Rolf B: Variablen aus Perlprogramm in C einlesen

Beitrag lesen

Hallo Patrick,

Das einfachste wäre wahrscheinlich wirklich, die Variable „von Hand“ auszulesen

Ich kann mir mehrere Möglichkeiten vorstellen.

  1. Das C-Programm fasst diese database_data.pm Datei als Config-Datei mit eigenwilligem Format auf und sucht sich die Zeilen heraus, die es benötigt. Das setzt voraus, dass die .pm Datei einem erträglich lesbaren Schema folgt und die Config-Werte Konstanten sind. Sind es Ausdrücke, ist es vorbei.

  2. Man schreibt ein neues .pl Script, das die database_data.pm importiert und die für C benötigten Werte in ein C-freundliches Format exportiert. An der Stelle kommt PLs Stichwort "Deployment" zum Zuge - dieses Exportscript laufen zu lassen ist etwas, das Teil des Deployments ist und bei Installation einer neuen Programmversion auf dem Zielsystem automatisch ausgeführt werden muss, um konsistente Konfigurationsdaten zu haben. Man könnte natürlich auch im C-Teil an geeigneter Stelle die Timestamps von database_data.pm und database_data.dat vergleichen und bei Bedarf das Exportscript anstoßen, das setzt aber Schreibrecht der Anwendung auf ihre Runtime-Dateien voraus und sowas unterlässt man besser, um den Hackern das Leben nicht zu leicht zu machen. Eine Lösung ohne Extradatei wäre auch, wenn das Exportscript sein Ergebnis einfach aus stdout schreibt. Das C-Programm ruft es auf, klemmt sich vor das stdout des Exportprozesses und liest die Ausgabe des Exporters darüber ein. Ob das sinnvoll ist, hängt auch davon ab, wie oft man das tun muss.

  3. Wenn die Config-Werte nicht zur Laufzeit gelesen werden müssen, sondern dem C-Programm "eingebrannt" werden können, kann man auch ein .pl Script schreiben, das aus der database_data.pm eine database_data.c oder database_data.h Datei generiert. Die nimmt man beim Compile der C-Module einfach mit hinzu.

Rolf

--
sumpsi - posui - clusi