Output eines externen Programms "abfangen" und ggf. bearbeiten...
-
Pigeon schrieb:
Du gehst nämlich nicht daruaf ein wie man den Output gar nicht ausgibt

Also offensichtlich begreifst du nich dass mein Beispiel eben den ganzen Output des externen programmes in eine Datei umleitet ( es erscheint daher überhaupt nichts an Bildschirm ). Das anlegen des ifstream objektes sollte auch nur andeuten dass du den umgeleiteteten Output in deinem Programm einlesen könntest und selbst entscheiden kannst wie du die Daten anzeigen willst.
Nach meiner Meinung war das eine vollständige Lösung deiner Aufgabenstellung. Wenn du das nicht verstehst kann ich leider nicht weiter helfen.
K
-
Tatsaechlich! Da wird nix ausgegeben. Dann hattest du ja recht

Da wir nun nicht mehr auf Glaskugel-Niveau reden, kannst du mir doch sicher noch eine Loesung ohne Umleitung in eine Datei anbieten. Vorhin hab ich das Beispiel mit der passwort cin-Eingabe genannt, ist das ein groesserer Aufwand oder wie kann man die Eingabe weiterleiten um zB eine GUI fuer ein Konsolenprogramm zu erstellen?
-
Hallo,
Standard-C++ bietet keine Mittel für Interprozess-Kommunikation. Abhängig von deinem verwendeten BS gibt es aber viele mögliche Wege. Einer wäre z.B. die Verwendung von pipes (popen/pclose...)
-
Unter Windows mit CreatePipe und CreateProcess
-
Nichts standardmäßiges also...

Ich benutze fast ausschließlich Gentoo (Linux) und portiere nur sehr wenige Sachen auf Windows. Gibt es da was unabhängiges? Und was hat es mit den pipes auf sich? *google gerade bemühe*//Edit:
Ich habe folgendes gefunden:
http://members.aon.at/hstraub/linux/socket++/docu/socket++_11.html
...und mir das Gentoo-Packet "Socket" emergt. Ich probier damit mal rum. Danke!//Edit 2:
Wenn ich dieses (notwendigerweise modifiziertes) Beispiel vom o.g. Link versuche zu kompilieren...
#include <iostream> #include <socket++/pipestream.h> using namespace std; int main () { char buf[128]; ipipestream p("/bin/date"); p.getline (buf, 127); cout << buf << endl; return 0; }... so erscheint folgender Fehler:
[sammy@Blueberry](~) $ g++ pipe.cpp -o pipe
/tmp/cc1ecDst.o: In functionmain': pipe.cpp:(.text+0x26): undefined reference toipipestream::ipipestream[in-charge](char const*)'
collect2: ld returned 1 exit statusKann mir das jemand erklären?

-
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostProcess
Vielleicht hilft das? ist aber nichts offizielles.
-
Artchi schrieb:
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostProcess
Vielleicht hilft das? ist aber nichts offizielles.
Das kann ich leider nicht ausprobieren, da der Download-Link nicht funktioniert...
Um auf die Pipes zurückzukommen, ich finde leider nichts weiteres was mich damit weiter bringt. Kann sich niemand vorstellen warum das Beispiel in meinem letzten Post nicht funktioniert?
-
Pigeon schrieb:
Kann sich niemand vorstellen warum das Beispiel in meinem letzten
Post nicht funktioniert?Doch kann ich.
Kurt
-
ZuK schrieb:
Pigeon schrieb:
Kann sich niemand vorstellen warum das Beispiel in meinem letzten
Post nicht funktioniert?Doch kann ich.
KurtDas freuet mich für dich und lasset mein Herz erquicken!
Nur würd ich die Lösung auch gern wissen. Verrätst dus mir? Sonst muss ich mir bei eBay ne Glaskugel bestellen...
*g*
-
Ah du willst das auch wissen. ( gefragt haste nicht ).
Würde sagen dass du die zugehörige library zu deinem programm dazulinken musst.
Kurt
-
ZuK schrieb:
Ah du willst das auch wissen. ( gefragt haste nicht ).
Würde sagen dass du die zugehörige library zu deinem programm dazulinken musst.
Kurtwie denn linken? reicht nicht #include <socket++/pipestream.h>
-
Nein reicht nicht. Die zugehörige library muss noch irgendwie ( kenn deine IDE nicht ) bei den linker-optionen ins Project.
Kurt
-
ZuK schrieb:
Nein reicht nicht. Die zugehörige library muss noch irgendwie ( kenn deine IDE nicht ) bei den linker-optionen ins Project.
Kurt:-| Meine IDE ist die Konsole... und kompiliere gcc. g++ pipe.cpp -o pipe!
-
Nehmen mir mal an die library ist eine statische lib heisst libsocket.a.
dann wärs etwag++ pipe.cpp -lsocket -o pipeeventuell ( wenn die library nicht im normalen library pfad installiert ist )
g++ pipe.cpp -L/usr/waoauchimmer/wiauchimmer -lsocket -o pipeKurt
-
ZuK schrieb:
Nehmen mir mal an die library ist eine statische lib heisst libsocket.a.
dann wärs etwag++ pipe.cpp -lsocket -o pipeeventuell ( wenn die library nicht im normalen library pfad installiert ist )
g++ pipe.cpp -L/usr/waoauchimmer/wiauchimmer -lsocket -o pipeKurt
geht mit -lsocket++ ausgezeichnet! Danke
