Maison > développement back-end > C++ > Comment puis-je rediriger la sortie standard vers une fonction en C ?

Comment puis-je rediriger la sortie standard vers une fonction en C ?

Susan Sarandon
Libérer: 2024-10-31 09:35:02
original
696 Les gens l'ont consulté

How Can I Redirect Standard Output to a Function in C  ?

Redirection de la sortie standard en C

En C , le flux de sortie standard (stdout) envoie généralement des données à la console. Cependant, il existe des situations dans lesquelles vous souhaiterez peut-être rediriger cette sortie vers une fonction personnalisée pour traitement.

Redirection vers une fonction à l'aide de ostringstream

Une approche pour rediriger la sortie standard vers une fonction consiste à utiliser un ostringstream. Il s'agit d'un tampon de flux basé sur la mémoire qui capture essentiellement la sortie de tout flux qui y est dirigé.

<code class="cpp">// Declare a new ostringstream
ostringstream strCout;

// Redirect cout to the ostringstream
cout.rdbuf(strCout.rdbuf());

// Write to the ostringstream
cout << "test" << endl;

// Restore the original cout stream
cout.rdbuf(oldCoutStreamBuf);</code>
Copier après la connexion

Maintenant, l'objet strCout contient la sortie qui serait envoyée vers la sortie standard. Vous pouvez ensuite transmettre cette sortie à votre fonction personnalisée pour un traitement ultérieur.

<code class="cpp">void MyHandler(const char* data) {
  // Process the data from strCout.str()
}

MyHandler(strCout.str().c_str());</code>
Copier après la connexion

Redirection vers une fonction à l'aide d'appels système

Une autre approche consiste à utiliser des appels système comme freopen() ou setbuf() pour rediriger la sortie standard vers un tube. Cela vous permet de capturer la sortie dans un processus ou un thread séparé.

<code class="cpp">// Open a file stream to a named pipe
FILE* pipe = fopen("my_pipe", "w");

// Redirect stdout to the pipe
setbuf(stdout, pipe);

// Write to stdout
printf("test");

// Close the pipe
fclose(pipe);</code>
Copier après la connexion

La sortie de printf sera désormais écrite dans le tube. Vous pouvez ensuite créer un processus ou un thread distinct pour lire à partir du canal et effectuer le traitement souhaité.

Limitations

Notez que la redirection de la sortie standard à l'aide de ostringstream n'affecte que la sortie de cout. D'autres flux comme printf ou stderr peuvent toujours être envoyés à la console. Pour une redirection complète, envisagez d'utiliser l'approche d'appel système ou d'implémenter un streambuf personnalisé.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal