C STDOUT auf eine benutzerdefinierte Funktion umleiten
Das Umleiten von stdout auf eine Datei ist eine gängige Praxis, aber was ist, wenn Sie es umleiten möchten? eine Funktion, die Sie definieren?
Betrachten Sie beispielsweise den folgenden hypothetischen Fall:
<code class="cpp">void MyHandler(const char* data); // <Magical redirection code> printf("test"); std::cout << "test" << std::endl; // MyHandler should have been called with "test" twice at this point</code>
Lösung
Wie von @Konrad Rudolph hervorgehoben, wird stdout auf eine Funktion umgeleitet ist mit einem Ostringstream möglich. So können Sie es tun:
<code class="cpp">// Redirect cout. std::streambuf* oldCoutStreamBuf = std::cout.rdbuf(); std::ostringstream strCout; std::cout.rdbuf(strCout.rdbuf()); // This goes to the string stream. std::cout << "Hello, World!" << std::endl; // Restore old cout. std::cout.rdbuf(oldCoutStreamBuf); // Will output our Hello World! from above. std::cout << strCout.str();</code>
Während diese Methode für cout, cerr und clog funktioniert, leitet sie möglicherweise nicht alle stdout-Daten für Funktionen wie printf um, die normalerweise sowohl auf stdout- als auch auf stderr-Streams abzielen.
Für größere Daten können fortgeschrittenere Techniken wie freopen(), setbuf(), dup() und dup2() eingesetzt werden. Diese Vorgänge erfordern etwas mehr Verständnis auf Systemebene und können das Erstellen von Pipes oder das Bearbeiten von Dateideskriptoren umfassen.
Das obige ist der detaillierte Inhalt vonWie leite ich C STDOUT auf eine benutzerdefinierte Funktion um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!