将标准错误重定向到C中的字符串

我希望能够将stderr重定向到C字符串,因为我需要在我正在编写的程序中使用该字符串。 我想避免写入文件(在硬盘上)然后读取文件以获取字符串。 完成这项工作的最佳方法是什么?

你可以使用setbuf()来改变stderr的缓冲区:

 #include  int main(void) { char buf[BUFSIZ]; setbuf(stderr, buf); fprintf(stderr, "Hello, world!\n"); printf("%s", buf); return 0; } 

打印:

 Hello, world! Hello, world! 

注意:您应该在流上的任何操作之前更改缓冲区。

  1. 将stderr重定向到stdout并管道到你的C程序。 请参见如何管道stderr,而不是stdout?
  2. 当然,请阅读C程序中的stdin。

这是假设stderr来自另一个程序。 如果要从程序和进程中捕获所有stderr输出,则在单独的线程中通过fopen("/dev/stderr", "r")监听对stderr的写入。

我使用C ++给出了一个解决方案,将stdout和stderr重定向到一个函数(为每一行调用)。 我知道这被标记为C,但我的解决方案的胆量使用POSIX api。

请参阅https://stackoverflow.com/a/25087408/364818