关于非阻塞管道有很多问题,但是没有可以复制和粘贴(几乎没有更正)和使用的代码示例。
我从这个线程中得到了想法和来源: Non-blocking pipe using popen?
但是如何使用呢?在while
周期?请检查我的更改。真的需要使用errno == EAGAIN
& 附加标题#include <cerrno>
吗?如果需要,建议您拥有更好的版本:
FILE *pipe;
char buff[512];
if ( !(pipe = popen( command.c_str(), "r")) ) return false;
int d = fileno(pipe);
while ( true )
{
ssize_t r = read(d, buff, sizeof(buff));
if (r == -1 && errno == EAGAIN) // really need errno?
continue;
else if (r > 0)
ptr_output->append(buff);
else
break;
}
pclose(pipe);