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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 18:37:04976parcourir

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

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!

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