Ausgabeumlenkung in Variable
-
Hallo Leute,
ich starte mit popen() einen Prozess. Die Ausgabe bearbeite ich mit "cut" und lenke diese momentan noch in eine Datei um. Prinzipieller Aufbau des Aufrufs:
FILE *BEFEHL; char command[1024]; sprintf(command, "(Befehl 1) && ((Befehl 2 &) | (cut [Argumente])&) >> Dateiname); BEFEHL = popen(command, "w");
Ist ein bisschen umständlich, funktioniert aber.
Nun würde ich die Ausgabe aber gerne in eine interne Variable umlenken, statt sie in einer Datei zu speichern. Geht das überhaupt?Schon mal Danke
Stephan
-
dafür gibt es doch popen, damit du die Ausgabe direkt einlesen kannst
(siehe man: popen(3))
-
Hmmm...? Ich befürchte wir reden aneinander vorbei.
Mit popen() führe ich einen Befehl im X-Terminal aus. Die Standartausgabe dieses Befehls ist der Bildschirm. Nun will ich diese Ausgabe aber nicht in eine Datei umleiten (wie oben gezeigt), sondern direkt in eine Variable speichern.
Wenn wir doch nicht aneinander vorbeireden bitte ich um ein Beispiel, denn ich habe keinen blassen Dunst wie ich das anstellen soll
-
popen() (siehe den Manual-Link von kingruedi) öffnet ein FILE*, das mit der Ein- oder Ausgabe des Befehls verkoppelt wird, d.h. nach dem Befehl kannst du dir die Ausgaben direkt per fscanf/fread abholen:
char command[]="(Befehl 1) && ((Befehl 2 &) | (cut [Argumente])&)"; FILE* console=popen(command,"r"); char data[100];int i=0; while(!feof(console) { fscanf(console,"%99s",data) fprintf("%d\t%s\n",++i,data); }
-
Ich vermute mal, cryptomane benutzt popen(..., "w"), weil er Daten an das aufgerufene Programm senden möchte. Wenn gleichzeitig auch die Ausgaben des Programms verarbeitet werden sollen, muss er wohl mit Pipes, dup2() und execlp() arbeiten.
(->Beispiel)