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

Redirect standard error to a string in C

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


您可以使用setbuf()来更改stderr的缓冲区:

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

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

打印:

1
2
Hello, world!
Hello, world!

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


  • 将stderr重定向到stdout并管道到你的C程序。 请参阅如何管道stderr,而不是stdout?
  • 当然,请阅读C程序中的stdin。
  • 这是假设stderr来自另一个程序。 如果要从程序和进程中捕获所有stderr输出,则在单独的线程中通过fopen("/dev/stderr","r")侦听对stderr的写入。


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

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