user1660675
user1660675

Reputation: 149

Redirect standard error to a string in C

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

Answers (3)

Mark Lakata
Mark Lakata

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

iabdalkader
iabdalkader

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

djechlin
djechlin

Reputation: 60848

  1. Redirect stderr to stdout and pipe to your C program. See How to pipe stderr, and not stdout?
  2. 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").

Upvotes: 2

Related Questions