首页  >  文章  >  后端开发  >  如何将标准输出重定向到 C 中的函数?

如何将标准输出重定向到 C 中的函数?

Susan Sarandon
Susan Sarandon原创
2024-10-31 09:35:02639浏览

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

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

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