C++ popen()
gibt einen Dateideskriptor zurück, der die Ausgabe enthält, nachdem ein Prozess ausgeführt wurde. Anstelle von FILE * brauche ich ein char *, dh. eine Zeichenfolge, um meine Ausgabe zu sein. Was mache ich? Bitte hilf mir.C++ popen() 's Ausgabe in eine Zeichenfolge
Antwort
Ich nehme ich etwas auf dieser allgemeinen Ordnung tun würde:
char big_buffer[BIG_SIZE];
char small_buffer[LINE_SIZE];
unsigned used = 0;
big_buffer[0] = '\0'; // initialize the big buffer to an empty string
// read a line data from the child program
while (fgets(small_buffer, LINE_SIZE, your_pipe)) {
// check that it'll fit:
size_t len = strlen(small_buffer);
if (used + len >= BIG_SIZE)
break;
// and add it to the big buffer if it fits
strcat(big_buffer, small_buffer);
used += strlen(small_buffer);
}
Wenn Sie ausführlichere erhalten möchten, können Sie Raum dynamisch zuweisen könnte, und versuchen, es als notwendig zu erhöhen, um die Menge an Ausgangs zu halten du erhältst. Das wäre ein besserer Weg, wenn Sie nicht wenigstens eine Vorstellung davon haben, wie viel Output das Kind produzieren könnte.
Edit: Da Sie C verwenden ++, ein Ergebnis mit dynamischer Größe ist eigentlich recht einfach:
char line[line_size];
std::string result;
while (fgets(line, line_size, your_pipe))
result += line;
Warum verwenden Sie nicht eine 'std :: string' für das Endergebnis und verwenden' append'? –
@KerrekSB: Hauptsächlich, weil ich irgendwie dachte, dass es als C und nicht C++ markiert wurde. –
Lesen Sie die Ausgabe von FILE*
in eine Zeichenfolge mit den üblichen Routinen stdio
.
Danke für die Antwort. Könnten Sie bitte einen Beispielcode angeben ... !!! ??? –
Siehe https://stackoverflow.com/a/10702464/981959
Sie können es in zwei Linien tun (drei mit einem typedef Verbesserte Lesbarkeit):
#include <pstream.h>
#include <string>
#include <iterator>
int main()
{
redi::ipstream proc("./some_command");
typedef std::istreambuf_iterator<char> iter;
std::string output(iter(proc.rdbuf()), iter());
}
Dies kümmert sich um die gesamte Speicherzuweisung und schließt den Stream wieder, wenn Sie damit fertig sind.
- 1. C - Popen zeigt keine richtige Ausgabe
- 2. C libcurl Ausgabe in eine Zeichenfolge
- 3. popen Äquivalent in C++
- 4. C seltsame Zeichenfolge Ausgabe
- 5. Ausgabe Multibyte Zeichenfolge in C++
- 6. Gegeben eine Zeichenfolge, s, spalte die Zeichenfolge in Token
- 7. Popen gibt keine Ausgabe sofort wenn verfügbar
- 8. Zeichenfolge s; &s+1; Legal? UB?
- 9. Erklärung readelf -S Ausgabe
- 10. Verständnis gcc -S Ausgabe
- 11. Passing eine Zeichenfolge an eine Funktion zur Ausgabe es (C++)
- 12. python - wie die Ausgabe mit popen pipe?
- 13. Konvertieren Sie eine SQL-Zeichenfolge Ausgabe in Zeitstempel mit C#
- 14. Format eine Zeichenfolge in C
- 15. Python popen pipe in Schleife
- 16. Fehler eine Zeichenfolge in C
- 17. Hat Powershell eine Entsprechung zu Popen?
- 18. c Programm zum Speichern des Befehls show output in eine Zeichenfolge
- 19. Redirect Ausgabe von sed 's/c/d /' myFile zu myFile
- 20. Perl anhängende (s) printf-Ausgabe an String
- 21. Eingabe/Ausgabe für eine Datei in C++
- 22. popen und Dateioperation
- 23. Wie öffne ich einen Prozess in C++ mit popen ohne Eingabe und Ausgabe an stdin?
- 24. Drehen Sie eine Zeichenfolge in C++?
- 25. Analysiere eine Zeichenfolge in C#
- 26. Randomize eine Zeichenfolge in C
- 27. Eine Zeichenfolge in C++ analysieren
- 28. Verfahrgeschwindigkeit eine Zeichenfolge in C++
- 29. inverse Zeichenfolge in c
- 30. Erste Anwendung Ausgabe in eine Variable Python
Werfen Sie einen Blick auf diesen Thread: http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c Viel Glück! – DCMaxxx