#include "StdOutRedirector.h" #include #include StdOutRedirector::StdOutRedirector() : QObject() { #ifdef __linux__ if (pipe(fdguistd) == -1) printf("failed!"); #else // Redirect if (_pipe(fdguistd, 4096, _O_BINARY) == -1) printf("failed!"); #endif //int tr = fcntl(fdguistd, O_NONBLOCK); // Duplicate stdout file descriptor (next line will close original) fdStdOut = dup(fileno(stdout)); // Duplicate write end of pipe to stdout file descriptor if (dup2(fdguistd[1], fileno(stdout)) != 0) printf("failed!"); // Close original close(1); // Duplicate write end of original dup2(fdguistd[1], 1); } StdOutRedirector::~StdOutRedirector() { } void StdOutRedirector::readOutsToTF() { int n_out; char* buffer = new char[4096]; QString str; //char buffer[512]; //qDebug() << "from qdebug..."; //printf("from printf...\n"); //std::cout << "from std::cout..." << std::endl; fflush(stdout); //Perhaps there is a non-blocking version of _read() that you can call ? n_out = read(fdguistd[0], buffer, 4096); if (n_out <= 0) return; if (n_out >= 1) { str.append(QString(buffer)); int con = str.lastIndexOf('\n'); int remv = str.at(con - 1) == '\n' ? 1 : 0; if (con) { str = str.remove(con - remv, str.length()); output->append(str); } } }