将 STDOUT 重定向到自定义处理程序
在您希望定制通常定向到 stdout 流的输出的应用程序中,您可能会寻求方法将其重定向到其他地方。虽然众所周知,您可以将 stdio 重定向到文件,但为什么不考虑将其重定向到您自己定义的函数呢?
了解 C 的标准输出
首先,了解 stdout 以及 stderr 和 stdin 代表未格式化数据的预定义输出流至关重要。 printf 函数和 C iostream 一样,利用 stdout 来显示输出。
通过 ostringstream 实现重定向
重定向到自定义函数确实是可行的。对于 cout、cerr 和 clog 流,您可以借助 ostringstream 来实现此目的,而无需实现自己的 Streambuf。以下是示例代码片段:
<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>
注意事项和替代方法
虽然此方法可以重定向 cout、cerr 和 clog 的输出,但它可能不起作用无缝地用于标准输出和标准错误。例如,printf 不会输出到自定义函数。
对于较小的数据大小,使用 freopen 或 setbuf 是一个可行的选择。但是,对于大量数据,建议使用复杂的 dup 或 dup2 机制,其中涉及重定向到管道。
以上是如何将 STDOUT 重定向到 C 中的自定义函数?的详细内容。更多信息请关注PHP中文网其他相关文章!