Richtiger Code - Nicht blockierendes Rohr mit Druckknopf

Es gibt Unmengen von Fragen zu nicht blockierenden Rohren, aber KEINE Codebeispiele, die kopiert und eingefügt (mit geringer Korrektur) und verwendet werden können.

Ich habe die Idee und Quellen aus diesem Thread:Nicht blockierendes Rohr mit Popen?

Aber wie benutzt man es? Beimwhile Zyklus? Bitte überprüfen Sie meine Änderungen. Ist es wirklich nötig zu benutzenerrno == EAGAIN & Zusätzlicher Header#include <cerrno> ? Schlagen Sie eine bessere Version vor:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage