Maison > développement back-end > C++ > le corps du texte

Comment rediriger C STDOUT vers une fonction définie par l'utilisateur ?

DDD
Libérer: 2024-11-01 01:04:02
original
171 Les gens l'ont consulté

How to Redirect C   STDOUT to a User-Defined Function?

Redirection C STDOUT vers une fonction personnalisée

La redirection de la sortie standard vers un fichier est une pratique courante, mais que se passe-t-il si vous souhaitez le rediriger vers une fonction que vous définissez ?

Par exemple, considérons le cas hypothétique suivant :

<code class="cpp">void MyHandler(const char* data);

// <Magical redirection code>

printf("test");
std::cout << "test" << std::endl;

// MyHandler should have been called with "test" twice at this point</code>
Copier après la connexion

Solution

Comme l'a souligné @Konrad Rudolph, rediriger stdout vers une fonction est possible en utilisant un ostringstream. Voici comment procéder :

<code class="cpp">// Redirect cout.
std::streambuf* oldCoutStreamBuf = std::cout.rdbuf();
std::ostringstream strCout;
std::cout.rdbuf(strCout.rdbuf());

// This goes to the string stream.
std::cout << "Hello, World!" << std::endl;

// Restore old cout.
std::cout.rdbuf(oldCoutStreamBuf);

// Will output our Hello World! from above.
std::cout << strCout.str();</code>
Copier après la connexion

Bien que cette méthode fonctionne pour cout, cerr et clog, elle peut ne pas rediriger toutes les sorties standard pour des fonctions telles que printf, qui ciblent généralement à la fois les flux stdout et stderr.

Pour des données plus volumineuses, des techniques plus avancées telles que freopen(), setbuf(), dup() et dup2() peuvent être utilisées. Ces opérations nécessitent un peu plus de compréhension au niveau du système et peuvent impliquer la création de canaux ou la manipulation de descripteurs de fichiers.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!