_popen - Problem
-
Hoi. Ich hab ein Problem mit der _POPEN-Funktion... möchte die Ergebnisse eines CMD-Befehls haben und hab diverse Möglichkeiten ausprobiert...letztlich bin ich zu dieser hier gekommen, die zwar kompiliert, aber dennoch nicht funktioniert:
char psBuffer[128]; FILE *pPipe; if( (pPipe = _popen( "netstat -n", "rt" )) == NULL ) exit( 1 ); while( !feof( pPipe ) ) { if( fgets( psBuffer, 128, pPipe ) != NULL ) printf( psBuffer ); } printf( "\nProcess returned %d\n", _pclose( pPipe ) );
Aber genau wie bei jedem anderen Beispiel, das ich finden konnte, wird der while-Block mit der printf-Anweisung niemals erreicht. Der Prozess wird stets mit 1 beendet.
Genau wie in folgendem Beispiel; hier wird stets "popen() failed." ausgegeben...
FILE *fpipe; char *command = "netstat -n"; char line[256]; if (0 == (fpipe = (FILE*)popen(command, "r"))) { perror("popen() failed."); exit(1); } while (fread(line, sizeof line, 1, fpipe)) { printf("%s", line); } pclose(fpipe);
Kann mir jemand sagen wo der Fehler ist?
-
Hast du als Subsystem "Console" eingestellt?
http://msdn.microsoft.com/en-us/library/96ayss4b(v=vs.80).aspx
Note
If used in a Windows program, the _popen function returns an invalid file pointer that causes the program to stop responding indefinitely. _popen works properly in a console application. (...)
-
Oooh....ich sollte wohl besser lesen...
Wie kann ich mein Vorhaben denn als GUI realisieren?
-
Smashman schrieb:
... möchte die Ergebnisse eines CMD-Befehls haben und hab diverse Möglichkeiten ausprobiert...
Ich hab dafür mal eine Klasse geschrieben, die das mittels einer Pipe ermöglicht. Siehe:
http://www.c-plusplus.net/forum/248213-full
-
Siehe folgender MSDN Artikel:
Creating a Child Process with Redirected Input and Output
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx
-
@Smashman
Du solltest wirklich besser lesenDen Link den Martin gerade gepostet hat findest du auch auf der Seite zu _popen. Gleich nach dem von mit zitierten Ausschnitt.