Maison  >  Article  >  développement back-end  >  Comment puis-je rediriger STDOUT vers une fonction personnalisée en C ?

Comment puis-je rediriger STDOUT vers une fonction personnalisée en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 01:02:03934parcourir

How Can I Redirect STDOUT to a Custom Function in C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn