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);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…