L'écriture de mon propre coquille... coincé sur des tuyaux?

Depuis quelques jours, j'ai été de tenter d'écrire mon propre coquille de mise en œuvre, mais il me semble avoir été coincé sur l'obtention des tuyaux pour fonctionner correctement. Je suis capable d'analyser une ligne de fourche et désactiver les commandes entre les tuyaux (ex: ls | sort) individuellement mais ne semble pas possible de les obtenir à de la pipe d'entrée de l'un en l'autre.

Je pense que je ne comprends pas comment les utiliser dup2() et les tuyaux correctement.

J'ai maintenant compris mon code qui ne répond toujours pas... 🙁 Donc coincé...

void forkAndExecute( char* arrayOfWords[] , vector<pid_t> *vectorOfPIDs , bool hasNextCmd , bool hasPrevCmd) {

int fd[ 2 ];
pid_t pid;

if( hasNextCmd ){
    pipe(fd);
}

pid = fork();

//error if PID < 0
if( pid < 0 ) {
    cerr << ">>> fork failed >>>" << endl;
    exit(-1);
}
//child process if PID == 0
else if( pid == 0 ) {
    if ( hasPrevCmd ){
        dup2(fd[0] , 0);
        close(fd[0]);
        close(fd[1]);

    }
    if ( hasNextCmd ){
        dup2(fd[1],1);
        close(fd[0]);
        close(fd[1]);
    }
    execvp( arrayOfWords[0] , arrayOfWords );
    cout << ">>> command not found >>>" << endl;
    //if logic reaches here, exec failed
    exit(0);
} 
//parent process
else{
    close(fd[0]);
    close(fd[1]);
    //if( ! isLastCmd ){

    //}
    vectorOfPIDs->push_back(pid);
}

}

OriginalL'auteur 101010110101 | 2009-09-22