Reputation: 149
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?
Upvotes: 5
Views: 7711
Reputation: 20904
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.
See https://stackoverflow.com/a/25087408/364818
Upvotes: -1
Reputation: 17332
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.
Upvotes: 15
Reputation: 60848
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")
.
Upvotes: 2