PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C oder C++]Konsolenausgabe in Variable umleiten



Dr.ChAoS
16.12.2007, 00:47
Guten Morgen Leute
Kann mir jemand sagen wie man das bereits ausgegebene Auf der Konsole in eine Variable speichern kann? Ich brauche das Speziell für die Funktion system(). Falls jemand eine alternative Funktion zur system Funktion kennt, die das Ergebnis nicht ausgibt sondern als Rückgabewert liefert wäre das auch ok. Allerdings wäre ersteres besser.
MfG
Dr.ChAoS

zao
16.12.2007, 11:52
http://msdn2.microsoft.com/en-us/library/ms684965.aspx

m.enno
16.12.2007, 11:54
Ich verstehe nicht so ganz was du meinst.
Meinst du jetzt, dass wenn du eine Variable z.B. 'i' hast und die ausgegeben wird, dass dieser Wert dann nacher einer neuen Variable zugewiesen wird?

mfg

rob00n
16.12.2007, 12:19
Nein, er meint wenn er z.B. system("ping www.n00bor.6x.to") schreibt, will er die Bildschirmausgabe in einer Variable haben.
Sprich das:

Ping www.n00b0r.de [81.169.145.75] mit 32 Bytes Daten:

Antwort von 81.169.145.75: Bytes=32 Zeit=53ms TTL=246
Antwort von 81.169.145.75: Bytes=32 Zeit=52ms TTL=246
Antwort von 81.169.145.75: Bytes=32 Zeit=54ms TTL=246
Antwort von 81.169.145.75: Bytes=32 Zeit=53ms TTL=246

Ping-Statistik f?ür 81.169.145.75:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 52ms, Maximum = 54ms, Mittelwert = 53ms

Dr.ChAoS
16.12.2007, 12:42
@n00bor
Stimmt, genau das meine ich.

@zao
Ich denke dass das das richtige ist, aber ich verstehe diese Funktion leider nicht so ganz. Ich habe mir auch mal den Beispiel Source angeschaut. Der scheint soweit ja zu funktionieren, aber ich verstehe nicht wie ich das dann letztendlich in eine Variable speichern soll bzw kann.

-[RiDER]-
16.12.2007, 17:03
Hi :D

Zur Kommunikation zwischen zwei Programmen sind Pipes (http://de.wikipedia.org/wiki/Pipe_%28Informatik%29) ganz gut.

Joar... says all...

GreetZ RiDER http://ugly.plzdiekthxbye.net/small/s023.gif

Dr.ChAoS
16.12.2007, 17:14
Ne, ich will nicht zwischen 2 Programmen Kommunizieren, sondern die Konsolenausgabe einer Funktion im selben Programm in eine Variable schreiben.

Hier ein Beispiel:


#include <sdtio.h>
#include <stdlib.h>

int main(){
char str[256];
str=system("dir");
//Die Konsolenausgabe von system ist jetzt in der Variable str gespeichert.
return 0;
}

So stelle ich mir das vor. Aber so geht das ja leider nicht, da system keine Rückgabe macht. Ich brauche aber eine.
MfG

-[RiDER]-
16.12.2007, 18:07
Hi :D
Ja, genau dafür sind Pipes da ;)

Dein Programm:
#include <stdio.h>

int main(void)
{
char str[1024];
gets(str);
}
Das Programm rufst du dann mit dein_programm | dir auf und hast die Ausgabe von dir in der Variable str.
Thats all!

Ich weiß nicht, ob es unter Windows auch möglich ist, die Ausgabe eines Programms als Parameter an das Programm zu übergeben (unter Unix-Systemen mit dein_programm `ls`, dann befindet sich die Ausgabe von ls in argv[1]).

GreetZ RiDER ;)

Dr.ChAoS
16.12.2007, 19:47
Ich habe dein Beispiel unter Windows getestet und es funktioniert leider nicht.
Auch mit argv[1] klappt es nicht.

Aber ich glaube ich muss genauer sagen warum ich das machen will.
Also es geht um ein Programm das ich über ein Webinterface steuere und die Ausgabe der jeweiligen Befehle zurück zum Interface senden möchte.
Desshalb ist es auch wichtig dass alles in einem einzelnen Programm stattfindet. Gibt es vielleicht eine Alternative zu der System Funktion?
Aber danke schonmal für die Hilfe bis jetzt.
MfG
Dr.ChAoS

-[RiDER]-
16.12.2007, 22:07
Sorry.

Du musst dir | dein_programm machen. ;)

GreetZ RiDER http://ugly.plzdiekthxbye.net/small/s149.gif

EDiT: Kannst du den Code beider Programme bearbeiten?

Dr.ChAoS
16.12.2007, 22:47
Wie meinst du ob ich den Code beider Programme bearbeiten kann?
Wenn du das Webinterface und das Remote Tool meinst, ja kann ich denn ich habe sie ja geschrieben.

So das Programm mit gets funktioniert fast. Aber es wird nur eine einzige Zeile der Ausgabe in die Variable gespeichert.
Aber davon mal abgesehen, selbst wenn diese Methode funktionieren würde, könnte ich sie nicht verwenden fällt mir grad auf. Denn das Programm enthält ja noch viele viele andere Anweisungen wesshalb ich nicht irgendwo zwischen rein eine gets Anweisung schreiben kann. Es muss alles in einem Programmdurchlauf geschehen und darf sich nicht selber neu starten oder ein zweites mal starten wie das bei Pipes der Fall wäre.
Es handelt sich ja um einen im Hintergrund laufendes Programm dass ich von einem Webinterface fernsteuere.
Es muss doch eine Lösung geben :(
MfG

-[RiDER]-
16.12.2007, 22:51
Dann heißen deine Freunde "Named Pipes" und Google ;)

MfG RiDER