Correct Code - Tubo sem bloqueio com popen
Há toneladas de perguntas sobre pipes não bloqueantes, mas NÃO há exemplos de código que possam ser copiar e colar (com pouca correção) e usados.
Eu tenho a idéia e fontes deste segmento:Tubo sem bloqueio usando popen?
Mas como usá-lo? Nowhile
ciclo? Por favor, revise minhas alterações. É realmente preciso usarerrno == EAGAIN
cabeçalho adicional#include <cerrno>
? Sugiro que você possua uma versão melhor se necessário:
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);