Правильный код - неблокирующая труба с попой

Существует множество вопросов о неблокирующих каналах, но НЕТ примеров кода, который можно скопировать и вставить (с небольшим исправлением) и использовать.

Я получил идею и источники из этой темы: Неблокирующая труба с использованием popen?

Но как это использовать? Вwhile цикл? Пожалуйста, просмотрите мои изменения. Это действительно нужно использоватьerrno == EAGAIN & Амп; дополнительный заголовок#include <cerrno> ? Suggest you own better version if need:

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

Ответы на вопрос(2)

Ваш ответ на вопрос