Schreiben meiner eigenen shell... stecken auf Rohre?

Den letzten paar Tagen habe ich schon versucht zu schreiben, meine eigenen shell-Implementierung, aber ich habe wohl steckengeblieben immer auf die Rohre, um richtig zu arbeiten. Ich bin in der Lage zu analysieren, eine Linie und Gabel aus werden die Befehle zwischen den Rohren (ex: ls | sort) individuell, aber kann nicht scheinen, um Sie Rohr Eingang aus in die andere.

Ich denke, dass ich einfach nicht verstehen, wie dup2() und pipes richtig.

Ich habe jetzt meinen code immer noch nicht... 🙁 So stecken...

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

}

InformationsquelleAutor der Frage 101010110101 | 2009-09-22

Schreibe einen Kommentar