Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann ich die Standardausgabe in eine Funktion in C umleiten?

Susan Sarandon
Freigeben: 2024-10-31 09:35:02
Original
638 Leute haben es durchsucht

How Can I Redirect Standard Output to a Function in C  ?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage