首页 > 后端开发 > C++ > 正文

如何将 C STDOUT 重定向到用户定义的函数?

DDD
发布: 2024-11-01 01:04:02
原创
172 人浏览过

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

将 C STDOUT 重定向到自定义函数

将 stdout 重定向到文件是一种常见的做法,但是如果您想将其重定向到文件怎么办你定义的函数?

例如,考虑以下假设情况:

<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>
登录后复制

解决方案

正如 @Konrad Rudolph 所指出的,将 stdout 重定向到函数可以使用 ostringstream。操作方法如下:

<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>
登录后复制

虽然此方法适用于 cout、cerr 和 clog,但它可能无法重定向 printf 等函数的所有 stdout,这些函数通常同时针对 stdout 和 stderr 流。

对于更大的数据,可以采用更先进的技术,如 freopen()、setbuf()、dup() 和 dup2()。这些操作需要更多的系统级理解,并且可能涉及创建管道或操作文件描述符。

以上是如何将 C STDOUT 重定向到用户定义的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!