Hi,
um zu überprüfen, ob auf einem Remote-Rechner eine Datei existiert, gebe ich per popen einen ls-Befehl:
und teste dann in der eigentlichen Funktion ob der Rückgabewert meinen Dateinamen enthält. Diese Strategie funktioniert aber anscheinend nicht immer, also selbst wenn die Konsolenausgabe mir etwas zurückgeben würde, wenn ich diesen Befehl eintippe, das Programm erhält in den Buffer nach wie vor nichts. Lasse ich die Sache im Debugger laufen, funktioniert es immer (deshalb ist es mir auch noch nie aufgefallen), läuft es als release-Version auf dem Gerät aber anscheinend nicht (habe ich jetzt mehr durch Zufall herausgefunden, dass der empfangende Buffer leer ist, obwohl die Datei vorhanden ist).
Gibt es da irgendwelche bekannten Probleme mit popen, dass der sich unter debug Kompilierungen anders verhält? Ich möchte vermeiden eine Datei auf das lokale Gerät kopieren zu müssen, nur um mit fopen(..) zu überprüfen, ob die Datei danach vorhanden ist, deshalb nutze ich ja den Befehl wie oben.
um zu überprüfen, ob auf einem Remote-Rechner eine Datei existiert, gebe ich per popen einen ls-Befehl:
Code:
void GetCommandOutput(std::string filename, std::string remote, std::string &result) { char buffer[1024]; //überdimensioniert, aber das sollte egal sein ... std::string cmdBuffer; //Setze den Kommandstring zusammen als z.B. "export DROPBEAR_PASSWORD=nurEinBeispiel; ssh [email protected] \"ls /tmp/install/project_install.sh 2>/dev/null\"" FILE *read_from=popen(cmdBuffer.c_str(), "r"); if (read_from EQ NULL) throw(ERR_FILE_READ); else { while (fgets(buffer, sizeof buffer, read_from)) result.append(buffer); fclose(read_from); } }
Gibt es da irgendwelche bekannten Probleme mit popen, dass der sich unter debug Kompilierungen anders verhält? Ich möchte vermeiden eine Datei auf das lokale Gerät kopieren zu müssen, nur um mit fopen(..) zu überprüfen, ob die Datei danach vorhanden ist, deshalb nutze ich ja den Befehl wie oben.
Comment