4

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

4

3 回答 3

14

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

#include <stdio.h>

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

印刷:

Hello, world! 
Hello, world!

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

于 2013-02-05T20:01:26.403 回答
2
  1. 将 stderr 重定向到 stdout 并通过管道连接到您的 C 程序。请参阅如何通过管道传输标准错误,而不是标准输出?
  2. 当然,在你的 C 程序中从标准输入读取。

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

于 2013-02-05T19:39:38.997 回答
-1

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

https://stackoverflow.com/a/25087408/364818

于 2014-08-01T21:09:09.887 回答