我希望能够将 stderr 重定向到 C 字符串,因为我需要在我正在编写的程序中使用该字符串。我想避免先写入文件(在硬盘上),然后再读取文件以获取字符串。完成这项工作的最佳方法是什么?
问问题
6714 次
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
- 将 stderr 重定向到 stdout 并通过管道连接到您的 C 程序。请参阅如何通过管道传输标准错误,而不是标准输出?
- 当然,在你的 C 程序中从标准输入读取。
这是假设 stderr 来自另一个程序。如果你想从你的程序和进程中捕获所有的 stderr 输出,那么在一个单独的线程中监听对 stderr 的写入fopen("/dev/stderr", "r")
。
于 2013-02-05T19:39:38.997 回答
-1
我给出了一个解决方案,使用 C++ 将 stdout 和 stderr 重定向到一个函数(每行调用)。我知道这被标记为 C,但我的解决方案的核心是使用 POSIX api。
于 2014-08-01T21:09:09.887 回答