Redirection de STDOUT vers un gestionnaire personnalisé
Dans les applications où vous souhaitez adapter la sortie généralement dirigée vers le flux stdout, vous pouvez chercher des moyens pour le rediriger ailleurs. S'il est bien connu que vous pouvez rediriger stdio vers un fichier, pourquoi ne pas envisager de le rediriger vers une fonction de votre propre définition ?
Comprendre la sortie standard de C
Tout d'abord, il est crucial de comprendre que stdout, avec stderr et stdin, représente un flux de sortie prédéfini pour les données non formatées. La fonction printf, ainsi que C iostream, utilisent stdout pour afficher la sortie.
Réaliser une redirection via ostringstream
La redirection vers une fonction personnalisée est en effet réalisable. Pour les flux cout, cerr et clog, vous pouvez y parvenir à l'aide de ostringstream sans avoir besoin d'implémenter votre propre streambuf. Voici un exemple d'extrait de code :
<code class="cpp">// Redirect cout. streambuf* oldCoutStreamBuf = cout.rdbuf(); ostringstream strCout; cout.rdbuf( strCout.rdbuf() ); // Output goes to the string stream. cout << "Hello, World!" << endl; // Restore original cout. cout.rdbuf( oldCoutStreamBuf ); // Retrieve content from the string stream. cout << strCout.str();</code>
Mises en garde et méthodes alternatives
Bien que cette méthode puisse rediriger la sortie de cout, cerr et clog, elle peut ne pas fonctionner de manière transparente pour stdout et stderr. printf, par exemple, n'affichera pas la fonction personnalisée.
Pour les données de plus petite taille, l'utilisation de freopen ou setbuf est une option viable. Cependant, pour des quantités de données plus importantes, il est recommandé d'utiliser le mécanisme sophistiqué dup ou dup2, qui implique une redirection vers un tube.
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!