STDOUT an einen benutzerdefinierten Handler umleiten
In Anwendungen, bei denen Sie die Ausgabe, die normalerweise an den stdout-Stream geleitet wird, anpassen möchten, suchen Sie möglicherweise nach Möglichkeiten um es woanders umzuleiten. Es ist zwar allgemein bekannt, dass Sie stdio in eine Datei umleiten können, aber warum sollten Sie es nicht in eine Funktion Ihrer eigenen Definition umleiten?
Grundlegendes zur Standardausgabe von C
Zunächst ist es wichtig zu verstehen, dass stdout zusammen mit stderr und stdin einen vordefinierten Ausgabestream für unformatierte Daten darstellt. Die printf-Funktion sowie der C iostream verwenden stdout, um die Ausgabe anzuzeigen.
Umleitung über ostringstream erreichen
Eine Umleitung auf eine benutzerdefinierte Funktion ist tatsächlich möglich. Für Cout-, Cerr- und Clog-Streams können Sie dies mit Hilfe von ostringstream erreichen, ohne dass Sie Ihren eigenen Streambuf implementieren müssen. Hier ist ein Beispielcodeausschnitt:
<code class="cpp">// Redirect cout. streambuf* oldCoutStreamBuf = cout.rdbuf(); ostringstream strCout; cout.rdbuf( strCout.rdbuf() ); // Output goes to the string stream. cout << "Hello, World!" << endl; // Restore original cout. cout.rdbuf( oldCoutStreamBuf ); // Retrieve content from the string stream. cout << strCout.str();</code>
Vorbehalte und alternative Methoden
Diese Methode kann zwar die Ausgabe von cout, cerr und clog umleiten, funktioniert aber möglicherweise nicht nahtlos für stdout und stderr. printf wird beispielsweise nicht an die benutzerdefinierte Funktion ausgegeben.
Für kleinere Datengrößen ist die Verwendung von freopen oder setbuf eine praktikable Option. Für größere Datenmengen empfiehlt es sich jedoch, den ausgefeilten dup- oder dup2-Mechanismus zu verwenden, der eine Umleitung auf eine Pipe beinhaltet.
Das obige ist der detaillierte Inhalt vonWie können Sie STDOUT in eine benutzerdefinierte Funktion in C umleiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!