Ausgabe von Systemaufruf in C-Programm direkt verarbeiten
-
Hallo!
Ich habe momentan das Problem dass ich irgendwie keine Informationen finden kann ich wie ich aus einem C-Programm ein beliebiges Programm aufrufen und die Ausgabe während der Laufzeit noch verarbeiten kann. Das Programm soll TCP-Pakete empfangen, diese auswerten und wenn alles stimmt ein anderes Programm aufrufen und bestimmte Daten dorthin weitergeben und während das aufgerufene Prgramm läuft soll die Ausgabe des Programms über die TCP-Verbindung zurück geschickt werden.
Leider konnte ich bisher nichts finden wie man die Ausgabe eines solchen Aufrufs direkt in das C-Programm bekommt. In Perl hätte z.B. damit man die Ausgabe von ifconfig nach dem Programmablauf bekommt ein $AUSGABE=`ifconfig` gereicht, wobei ich das noch nichtmal in C ohne Verwendung temporärer Dateien schaffe, wenn ich jetzt aber nicht erst nach dem Ablauf des Aufrufs sondern noch während dem Ablauf die Ausgabe verarbeiten will bekomm ich damit noch mehr Probleme.
Mein einziger nicht gerade eleganter Lösungsansatz wäre vor dem Aufruf einmal mit fork() den Prozess zu spalten und die Ausgabe des Aufrufs in eine temporäre Datei zu leiten und diese regelmäßig mit dem zweiten Prozess zu lesen und alle Änderungen zu schicken, aber eigentlich wollte ich die Verwendung temporärer Dateien vermeiden und dachte dass es vielleicht auch anders einfacher geht. Kann mir da jemand vielleicht nen Tipp geben wie ich das am besten machen kann oder wo ich vielleicht mehr Informationen darüber finden kann? Nach Stichworten wie "C", "system" und "stdout" zu suchen ist leider etwas schwierig weil die in etlichen Zusammenhängen vorkommen.
Richtig genial wäre auch falls jemand vielleicht ein kurzes Beispiel hätte wie ich ein externes Programm aufrufe und die Ausgabe von stdout und stderr im Programm direkt während der Laufzeit wieder verarbeiten kann.
Danke schonmal für eure Mühe!!!
Gruß
Dominic
-
Stichwort: Pipes
-
Danke für die schnelle Antwort, aber bis jetzt komm ich mit Pipes leider auch noch nicht weiter, ich weiss leider nicht wie der Aufruf aussehen muss damit die Ausgabe in die Pipe geht bzw. wie ich in meinem laufenden Programm dann direkt aus der Pipe lesen kann.
Würde ich das Programm "abc" aufrufen und die Ausgabe mit "xyz" auswerten würde der Aufruf ja normal "abc | xyz" sein, aber wie mache ich das wenn ich das aktuell laufende Programm oder einen anderen schon laufenden Prozess anstelle von xyz zum auswerten nehmen will, kann ich da der Pipe irgendwie einen Namen oder ähnliches geben damit der zweite Prozess irgendwie auf die Pipe zugreifen kann? Und wie kann ich "stderr" dabei in eine zweite Pipe lenken?
-
man: popen(3) ist eine Vereinfachung. Ansonsten durchsuch ein wenig das Forum, wir hatten da schon ein paar Beispiele.