首页  >  文章  >  后端开发  >  如何将 C STDOUT 重定向到用户定义的函数?

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

DDD
DDD原创
2024-11-01 01:04:02175浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn