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)
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);