Código correcto - Tubería sin bloqueo con popen
Hay toneladas de preguntas acerca de las tuberías que no bloquean, pero NO hay ejemplos de código que puedan copiarse y pegarse (con poca corrección) y usarse.
Tengo la idea y las fuentes de este hilo:¿Tubo sin bloqueo utilizando popen?
¿Pero cómo usarlo? Awhile
¿ciclo? Por favor, revise mis cambios. Es realmente necesario utilizarerrno == EAGAIN
& cabecera adicional#include <cerrno>
? Sugiera su propia versión mejor si es necesario:
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);