Skip to content
Advertisement

Non-blocking pipe using popen?

I’d like to open a pipe using popen() and have non-blocking ‘read’ access to it.

How can I achieve this?

(The examples I found were all blocking/synchronous)

Advertisement

Answer

Setup like this:

FILE *f = popen("./output", "r");
int d = fileno(f);
fcntl(d, F_SETFL, O_NONBLOCK);

Now you can read:

ssize_t r = read(d, buf, count);
if (r == -1 && errno == EAGAIN)
    no data yet
else if (r > 0)
    received data
else
    pipe closed

When you’re done, cleanup:

pclose(f);
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement