一尘不染

使用popen的非阻塞管道?

linux

我想使用打开管道,popen()并对其具有非阻塞的“读取”访问权限。

我该如何实现?

(我发现的示例都是阻塞/同步的)


阅读 758

收藏
2020-06-03

共1个答案

一尘不染

设置如下:

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

现在您可以阅读:

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

完成后,清理:

pclose(f);
2020-06-03