在 C 中重定向标准输出
在 C 中,标准输出流 (stdout) 通常将数据发送到控制台。但是,在某些情况下,您可能希望将此输出重定向到自定义函数进行处理。
使用 ostringstream 重定向到函数
将 stdout 重定向到的一种方法函数是利用 ostringstream。这是一个基于内存的流缓冲区,本质上捕获指向它的任何流的输出。
<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>
现在,strCout 对象包含本应发送到 stdout 的输出。然后,您可以将此输出传递给自定义函数以进行进一步处理。
<code class="cpp">void MyHandler(const char* data) { // Process the data from strCout.str() } MyHandler(strCout.str().c_str());</code>
使用系统调用重定向到函数
另一种方法是使用系统调用,例如freopen() 或 setbuf() 将标准输出重定向到管道。这允许您在单独的进程或线程中捕获输出。
<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>
printf 的输出现在将写入管道。然后,您可以创建一个单独的进程或线程来从管道中读取数据并执行所需的处理。
限制
请注意,使用 ostringstream 重定向 stdout 只会影响来自的输出库特。其他流(如 printf 或 stderr)仍可能输出到控制台。对于完整的重定向,请考虑使用系统调用方法或实现自定义streambuf。
以上是如何将标准输出重定向到 C 中的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!