Standardausgabe in C umleiten
In C sendet der Standardausgabestream (stdout) normalerweise Daten an die Konsole. Es gibt jedoch Situationen, in denen Sie diese Ausgabe möglicherweise zur Verarbeitung an eine benutzerdefinierte Funktion umleiten möchten.
Umleiten zu einer Funktion mit ostringstream
Ein Ansatz zum Umleiten von stdout zu Eine Funktion besteht darin, einen Ostringstream zu verwenden. Dies ist ein speicherbasierter Stream-Puffer, der im Wesentlichen die Ausgabe jedes an ihn gerichteten Streams erfasst.
<code class="cpp">// Declare a new ostringstream ostringstream strCout; // Redirect cout to the ostringstream cout.rdbuf(strCout.rdbuf()); // Write to the ostringstream cout << "test" << endl; // Restore the original cout stream cout.rdbuf(oldCoutStreamBuf);</code>
Jetzt enthält das strCout-Objekt die Ausgabe, die an stdout gegangen wäre. Sie können diese Ausgabe dann zur weiteren Verarbeitung an Ihre benutzerdefinierte Funktion übergeben.
<code class="cpp">void MyHandler(const char* data) { // Process the data from strCout.str() } MyHandler(strCout.str().c_str());</code>
Umleitung zu einer Funktion mithilfe von Systemaufrufen
Ein anderer Ansatz besteht darin, Systemaufrufe wie zu verwenden freopen() oder setbuf(), um stdout an eine Pipe umzuleiten. Dadurch können Sie die Ausgabe in einem separaten Prozess oder Thread erfassen.
<code class="cpp">// Open a file stream to a named pipe FILE* pipe = fopen("my_pipe", "w"); // Redirect stdout to the pipe setbuf(stdout, pipe); // Write to stdout printf("test"); // Close the pipe fclose(pipe);</code>
Die Ausgabe von printf wird nun in die Pipe geschrieben. Anschließend können Sie einen separaten Prozess oder Thread erstellen, um aus der Pipe zu lesen und die gewünschte Verarbeitung durchzuführen.
Einschränkungen
Beachten Sie, dass sich die Umleitung von stdout mithilfe von ostringstream nur auf die Ausgabe von auswirkt cout. Andere Streams wie printf oder stderr geben möglicherweise weiterhin an der Konsole aus. Für eine vollständige Umleitung sollten Sie den Systemaufrufansatz verwenden oder einen benutzerdefinierten Streambuf implementieren.
Das obige ist der detaillierte Inhalt vonWie kann ich die Standardausgabe in eine Funktion in C umleiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!