0

Hi I am working on Linux and I am trying to create a GUI app to go with my executable I have made.

For some reason it unexpectedly ends. There is no error message, it just says in the Qt console window it unexpectedly ended with exit code 0.

Can someone please have a look at it for me. I am working on Linux.

I will also paste the code here.

void MainWindow::on_pushButton_clicked()
{
    QString stringURL = ui->lineEdit->text();

    ui->labelError->clear();
    if(stringURL.isEmpty() || stringURL.isNull()) {
        ui->labelError->setText("You have not entered a URL.");
        stringURL.clear();
        return;
    }

    std::string cppString = stringURL.toStdString();
    const char* cString = cppString.c_str();

    char* output;

    //These arrays will hold the file id of each end of two pipes
    int fidOut[2];
    int fidIn[2];

    //Create two uni-directional pipes
    int p1 = pipe(fidOut);                  //populates the array fidOut with read/write fid
    int p2 = pipe(fidIn);                   //populates the array fidIn  with read/write fid
    if ((p1 == -1) || (p2 == -1)) {
        printf("Error\n");
        return;
    }

    //To make this more readable - I'm going to copy each fileid
    //into a semantically more meaningful name
    int parentRead  = fidIn[0];
    int parentWrite = fidOut[1];
    int childRead   = fidOut[0];
    int childWrite  = fidIn[1];

    //////////////////////////
    //Fork into two processes/
    //////////////////////////
    pid_t processId = fork();

    //Which process am I?
    if (processId == 0) {
        /////////////////////////////////////////////////
        //CHILD PROCESS - inherits file id's from parent/
        /////////////////////////////////////////////////
        ::close(parentRead);      //Don't need these
        ::close(parentWrite);     //

        //Map stdin and stdout to pipes
        dup2(childRead,  STDIN_FILENO);
        dup2(childWrite, STDOUT_FILENO);

        //Exec - turn child into sort (and inherit file id's)
        execlp("htmlstrip", "htmlstrip", "-n", NULL);

    } else {
        /////////////////
        //PARENT PROCESS/
        /////////////////
        ::close(childRead);       //Don't need this
        ::close(childWrite);      //

        //Write data to child process
        //char strMessage[] = cString;
        write(parentWrite, cString, strlen(cString));
        ::close(parentWrite);     //this will send an EOF and prompt sort to run

        //Read data back from child
        char charIn;
        while ( read(parentRead, &charIn, 1) > 0 ) {
            output = output + (charIn);
            printf("%s", output);
        }
        ::close(parentRead);      //This will prompt the child process to quit
    }

    return;
}
2
Contributors
1
Reply
2
Views
5 Years
Discussion Span
Last Post by gerard4143
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.