Leiten Sie stdout / stderr in eine Zeichenfolge um
es wurde viele frühere Fragen über die Umleitung von stdout/stderr in eine Datei. gibt es eine Möglichkeit zum umleiten von stdout/stderr zu einem string?
InformationsquelleAutor der Frage Prasanth Madhavan | 2011-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, können Sie umleiten zu einer
std::stringstream
:Können Sie eine einfache Wache-Klasse, um sicherzustellen, dass der Puffer immer zurückgesetzt:
InformationsquelleAutor der Antwort Björn Pollex
Mithilfe dieser Klasse können Sie:
call
BeginCapture()
wenn Sie brauchen, um zu erfassenrufen Sie
EndCapture()
wenn Sie brauchen, um zu stoppen erfassenrufen Sie
GetCapture()
abrufen eingefangen AusgabeInformationsquelleAutor der Antwort rmflow
Um eine thread-sichere & cross-Plattform-Lösung, die ich angepasst habe, rmflow Ansatz in eine ähnliche Schnittstelle. Da diese Klasse ändert Globale Datei-Deskriptoren, ich angepasst, um eine mutex-bewacht statische Klasse, die sich schützt gegen mehrfache Instanzen Prügel Globale Datei-Deskriptoren. Darüber hinaus rmflow Antwort nicht sauber alle verwendeten Datei-Deskriptoren, die zu Problemen führen kann öffnen neue (für output-streams oder-files), wenn viele BeginCapture() & EndCapture () - Aufrufe verwendet, die in einer Anwendung. Dieser code wurde getestet unter Windows 7/8, Linux, OSX, Android und iOS.
HINWEIS: um std::mutex müssen Sie kompilieren gegen die c++ 11. Wenn Sie nicht /nicht c++11, können Sie entfernen Sie die mutex-calls komplett zu opfern "thread safety") oder finden Sie eine legacy-Synchronisations-Mechanismus, um den job zu erledigen.
call
Init()
einmal (vor der Aufnahme) zu entfernen Pufferung von stdout /stderrcall
BeginCapture()
wenn Sie brauchen, um zu erfassencall
EndCapture()
wenn Sie brauchen, um zu stoppen erfassencall
GetCapture()
abrufen eingefangen Ausgabecall
IsCapturing()
um zu sehen, ob stdout/stderr ist derzeit umgeleitetInformationsquelleAutor der Antwort Sir Digby Chicken Caesar
Da Ihre Frage tagged-C-als auch C++ -, scheint es angebracht, zu erwähnen, dass, obwohl Sie nicht assoziieren eine Zeichenfolge, die eine DATEI * standard-C, gibt es mehrere nicht-standard-Bibliotheken, die es ermöglichen, dass. glibc ist fast schon standard, so können Sie völlig glücklich mit fmemopen() Siehe http://www.gnu.org/s/libc/manual/html_mono/libc.html#String-Streams
InformationsquelleAutor der Antwort William Pursell
habe ich eingerichtet qt osx bereit variation von Björn Pollex-code
InformationsquelleAutor der Antwort roberto