Redirection de la sortie standard en C
En C , le flux de sortie standard (stdout) envoie généralement des données à la console. Cependant, il existe des situations dans lesquelles vous souhaiterez peut-être rediriger cette sortie vers une fonction personnalisée pour traitement.
Redirection vers une fonction à l'aide de ostringstream
Une approche pour rediriger la sortie standard vers une fonction consiste à utiliser un ostringstream. Il s'agit d'un tampon de flux basé sur la mémoire qui capture essentiellement la sortie de tout flux qui y est dirigé.
<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>
Maintenant, l'objet strCout contient la sortie qui serait envoyée vers la sortie standard. Vous pouvez ensuite transmettre cette sortie à votre fonction personnalisée pour un traitement ultérieur.
<code class="cpp">void MyHandler(const char* data) { // Process the data from strCout.str() } MyHandler(strCout.str().c_str());</code>
Redirection vers une fonction à l'aide d'appels système
Une autre approche consiste à utiliser des appels système comme freopen() ou setbuf() pour rediriger la sortie standard vers un tube. Cela vous permet de capturer la sortie dans un processus ou un thread séparé.
<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>
La sortie de printf sera désormais écrite dans le tube. Vous pouvez ensuite créer un processus ou un thread distinct pour lire à partir du canal et effectuer le traitement souhaité.
Limitations
Notez que la redirection de la sortie standard à l'aide de ostringstream n'affecte que la sortie de cout. D'autres flux comme printf ou stderr peuvent toujours être envoyés à la console. Pour une redirection complète, envisagez d'utiliser l'approche d'appel système ou d'implémenter un streambuf personnalisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!