I would like to be able to redirect stderr to a C string because I need to use the string in the program I'm writing. I would like to avoid writing to a file (on the hard drive) first then readings the file to get the string. What is the best way to get this done?
You could just use setbuf() to change stderr
's buffer:
#include <stdio.h>
int main(void)
{
char buf[BUFSIZ];
setbuf(stderr, buf);
fprintf(stderr, "Hello, world!\n");
printf("%s", buf);
return 0;
}
prints:
Hello, world!
Hello, world!
Note: you should change the buffer before any operation on the stream.
- Redirect stderr to stdout and pipe to your C program. See How to pipe stderr, and not stdout?
- Read from stdin in your C program, of course.
This is assuming stderr is coming from another program. If you want to capture all stderr output from your program and process, then in a separate thread listen for writes to stderr via fopen("/dev/stderr", "r")
.
I gave an solution using C++ to redirect stdout and stderr to a function (called for each line). I know this was tagged as C, but the guts of my solution use the POSIX api.
来源:https://stackoverflow.com/questions/14715493/redirect-standard-error-to-a-string-in-c