Heim  >  Artikel  >  Backend-Entwicklung  >  Wie leite ich C STDOUT auf eine benutzerdefinierte Funktion um?

Wie leite ich C STDOUT auf eine benutzerdefinierte Funktion um?

DDD
DDDOriginal
2024-11-01 01:04:02172Durchsuche

How to Redirect C   STDOUT to a User-Defined Function?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn