Redirection de STDOUT en C
La refonte du flux de sortie en programmation est souvent nécessaire pour répondre aux exigences spécifiques des applications. Cet article aborde la question de la redirection de la sortie destinée à STDOUT vers une fonction personnalisée, en approfondissant les mécanismes sous-jacents impliqués et en fournissant des solutions pratiques.
Technique de redirection
Malgré le Connaissance commune de la redirection de STDOUT vers un fichier, le concept de redirection vers une fonction est également réalisable. La technique utilise une fonction désignée, MyHandler, pour recevoir et traiter des données qui seraient autrement envoyées à STDOUT.
Implémentation
L'implémentation s'articule autour de la redirection des flux cout et cerr. à un flux de chaîne (ostringstream). Voici un exemple simplifié :
<code class="cpp">// Redirect cout streambuf* oldCoutStreamBuf = cout.rdbuf(); ostringstream strCout; cout.rdbuf(strCout.rdbuf()); // Custom function void MyHandler(const char* data) {} // Output to the string stream cout << "Hello, World!" << endl; // Restore original cout cout.rdbuf(oldCoutStreamBuf); // Display the collected output from the string stream cout << strCout.str();</code>
Malheureusement, cette méthode redirige uniquement les données spécifiquement destinées à cout, et non la totalité de la sortie destinée à STDOUT. Par exemple, la sortie printf ne sera pas redirigée.
Options supplémentaires
Pour obtenir une redirection de sortie plus complète, envisagez d'utiliser des techniques telles que freopen, setbuf ou dup et dup2. appels système. Notez que même si ces méthodes permettent la redirection de la sortie STDOUT, elles présentent certaines limites et peuvent ne pas convenir à tous les scénarios.
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!