Probleme beim pipen von gnuplot
-
Hallo

ich habe ein Problem beim Pipen von gnuplot und dazu folgendes demo-Programm geschrieben:
#include <iostream> #include <sstream> using namespace::std; void pipeGnuplot(string filename){ ostringstream convert; FILE *gnuplotPipe; gnuplotPipe = popen("GNUPLOT","w"); if (gnuplotPipe==NULL){ cout<<"Error opening pipe to GNU plot. Check if you have it! \n"<<endl; } convert<<"set output '"<<filename<<".eps'"«endl; string setoutput=convert.str(); fprintf(gnuplptPipe, setoutput.c_str());fflush(gnuplotPipe); fprintf(gnuplotPipe,"load 'plot.plt' \n"); fflush(gnuplotPipe); cout<<filename<<endl; //—-Closing GNUPLOT Pipe fclose(gnuplotPipe); } int main(int argc, char **argv){ pipeGnuplot("test1"); pipeGnuplot("test2"); return 1; }plot.plt
set terminal postscript eps enhanced color font "Helvetica,12" plot sin(x) resetGnuplot wird einmal ordnungsgemäß ausgeführt, die datei. "test1.eps" wird erzeugt. Beim wiederholten Aufruf der pipe-Funktion werden zwar keine Fehler ausgegeben, gnuplot erstellt jedoch auch nicht die datei "test2.eps".
Weiß jemand woran das liegen könnte?
Danke schonmal!!

LG
-
Ich kann deine Probleme nicht nachvollziehen. Das ist auch kein Wunder, ist doch der Code, den du hier im Forum gepostet hast, nicht identisch mit dem Code, den du bei dir ausführst. Siehe:
http://www.c-plusplus.net/forum/304133fprintf(gnuplptPipe, setoutput.c_str());Aua! Wenn man C-Funktionen benutzt, dann bitte richtig. Über geschickte Wahl des Dateinamens könnte ich so dein Programm hacken!
Auch wenn die Frage nahe am Thema Linuxprogrammierung ist, lasse ich sie dennoch vorerst hier im Forum, bis der Threadersteller den eigentlichen Fehlercode gepostet hat, da im Vorhinein nicht klar ist, wo der Fehler nun liegt.
PS: Weiterhin gibt popen durchaus einen Wert != NULL zurück, wenn zwar die Shell erfolgreich gestartet wurde, aber das aufgerufene Kommando nicht gefunden wurde. Deine Fehlermeldung passt also nicht zu dem Fehler, der gemeldet wird und du prüfst auch nirgends auf den Fehler, den du hier eigentlich abfangen möchtest.
-
Vielen Dank für die schnelle Antwort!
Mein gepostetes "Beispiel- Programm" ist eine aufs Wesentliche reduzierte Version meines eigentlichen Projekts, die aber das mir unverständliche Verhalten reproduziert.
Es gibt weder beim Kompilieren, noch beim Ausführen eine Fehlermeldung.Führt man das Programm aus, wird von gnuplot "test1.eps" erzeugt, anschließend wird "test1" in der konsole ausgegeben.
"test2.eps" wird nicht erzeugt, "test2" wird nicht in die konsole geschrieben.
Ich habe mit einer weiteren Test-Ausgabe überprüft, bis wo das Programm beim. 2. Aufruf der Funktion kommt:
Ein "cout" vor dem ersten "fprintf" wird ausgeführt, ein "cout" danach nicht mehr beim zweiten Aufruf der Funktion.
Vielen Dank auch für die Sicherheitswarnung, ich werde das in Zukunft beachten.
-
gnuplotter schrieb:
Es gibt weder beim Kompilieren,
Doch! Was denkst du denn, woher ich sonst weiß, dass dies nicht deinem Programm entspricht? Dies ist offensichtlich im Foreneditor getippt. Vermutlich unter Entfernung des Fehlers.
Ich habe mit einer weiteren Test-Ausgabe überprüft, bis wo das Programm beim. 2. Aufruf der Funktion kommt:
Ein "cout" vor dem ersten "fprintf" wird ausgeführt, ein "cout" danach nicht mehr beim zweiten Aufruf der Funktion.
Benutz doch einen Debugger. Damit weißt du viel zuverlässiger, was passiert. Bei Konsolenausgaben musst du dir Gedanken machen über eventuelle Puffer oder um Umordnungen durch den Compiler (wobei er ein fprintf nicht an einem cout vorbeiziehen darf aber es geht ums Prinzip).