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

use*_*675 4 c string stderr io-redirection

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

iab*_*der 13

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

#include <stdio.h>

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

打印:

Hello, world! 
Hello, world!
Run Code Online (Sandbox Code Playgroud)

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


dje*_*lin 2

  1. 将 stderr 重定向到 stdout 并通过管道传输到您的 C 程序。请参阅如何通过管道传输 stderr,而不是 stdout?
  2. 当然,从 C 程序中的 stdin 读取。

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