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