Hallo Leute,
danke für die Zahlreichen Antworten und natürlich Kritiken,beides habe ich mir angenommen und das mit Dateien, zeilenweise einlesen funktioniert ohne Probleme.
Ich dachte nun das wäre das größte Problem für mich, der Rest wäre nur Fleissarbeit, aber lt. Murphy … konnt es nicht so sein.
Ich habe jetzt eine spezielle Frage an C-Entwickler auf Unix/Linux die die Unix-Shell mit nutzen.
Ich habe ein vorhandenes Programm, was mit Übergabe Parametern gestartet wird, genau wie in meinen letzten Artikel, es soll eine Datei zeilenweise ausgelesen werden und die Zeile als Übergabeparamter für das Programm.
Das ganze Spiel habe ich testweise in einen Shellscript probiert:
Das Programm welches ich starte, brauch festgelegte Variable im Script schaut das so aus:
#!/bin/sh
export BSPVAR; BSPVAR=‚Beispielvariable‘
export BSPVAR2; BSPVAR2=‚Beispielvariable‘
export BSPVAR3; BSPVAR3=‚Beispielvariable‘
#dann rufe ich das Programm auf
./[Pfad]/Progname 'Übergabe als String [die Zeilen]
Das funktioniert, dann dachte ich: Kraft meiner Wassersuppe
Ist ja kein Problem das in C zu übertragen:
#include …
main()
{
rc=system(„export BSPVAR; BSPVAR=‚Beispielvariable‘“);
rc=system(„export BSPVAR2; BSPVAR2=‚Beispielvariable‘“);
rc=system(„export BSPVAR3; BSPVAR3=‚Beispielvariable‘“);
//dann rufe ich das Programm auf
rc=system("./[Pfad]/Progname ‚Übergabe als String [die Zeilen]‘");
}
das schöne Programm liefert mir einen Segmentation Fault und ein Coredump, aus dem einfachen Grund, (denke ich) die Variablen gelten nichtmehr, ich rufe das Programm auf, mit leeren Shell-Variablen, das Prog. greift auf ein eine leere Variable zu und macht eine Speicher zugriffsverletzung.
Wenn ich jetzt, die ganzen Variablen in einer Zeile sammt dem Programmaufruf starte, funktioniert es:
rc=system(„export BSPVAR; BSPVAR=‚Beispielvariable‘;export BSPVAR2;BSPVAR2=‚Beispielvariable‘;export BSPVAR3;BSPVAR3=‚Beispielvariable‘;./[Pfad]/Progname ‚Übergabe als String [die Zeilen]‘“);
Aber ich muss ca. 100 Variablen setzen, und dann wird die Zeile riesig und, da werdet ihr mir zustimmen, es ist alles andere als ein eleganter Code.
Wie kann ich die Variable z.B. in einer Funktion initialisieren so das sie noch gelten, wenn ich das Programm starte? … irgendwie mit einer .profile Datei? nur so ein Gedankenblitz, keine Ahnung.
Hoffe ich war nicht ganz zu kompliziert.
Danke für Eure Hilfe!!!
Gruss Alex