Pipe ind Shell



  • Hallo Leute, ich muss in der Shell eine Pipe-Funktionalität implementieren..

    Kann mir jemand sagen was die Eins in der fett-markierten Zeile bedeutet?
    Vielen Dank im Voraus!!

    Aufgabenstellung lautet:
    "D.h. in der Kommandozeile sollen dann auch zwei durch eine Pipe verbundene Kommandos eingegeben werden können, wobei der erste Prozess die Eingabe für den zweiten liefert. Gekennzeichnet wird eine solche Pipe durch das auch von der bash her bekannte Symbol ‚|’."

    Beispiel: ls –als | more

    hier der Code dazu:

    /******************************************************************/
    **void isPipe(char *cmd) {
    **
    // pipeConnection[0] -> LeseDeskriptor
    // pipeConnection[1] -> SchreibDeskriptor
    int pipeConnection[2];

    char *inp[2];
    char *ptr, string1[100], string2[100];
    int i=1,j;

    ptr = strtok(cmd,"|");
    inp[0] = ptr;
    ptr = strtok(NULL,"|");
    if (ptr == NULL) {
    handleCmd(inp[0],0,NULL);
    }
    else {
    inp[1] = ptr;
    inp[1] = inp[1]+1; /* ?????????????? */

    printf("pipePre: %s\n",inp[0]);
    printf("pipeAft: %s\n",inp[1]);

    // Rueckgabe 0, wenn erfolgreich
    if(pipe(pipeConnection)) {
    printf("Fehler, pipe konnte niche geoeffnet werden\n");
    exit(0);
    }

    // 1. Aufruf Kindprozess schreibproz pipeCon[1]
    handleCmd(inp[0],1,pipeConnection);

    // 2. Aufruf Kindprozess lesebproz pipeCon[0]
    handleCmd(inp[1],-1,pipeConnection);
    }
    }



  • Wenn ich es richtig verstehe, ist inp[1] ein pointer. Der wird dann in der fett gedruckten Zeile um 1 inkrementiert...



  • ptr = strtok(cmd,"|"); // initialisier strtok
    inp[0] = ptr; // speichere ersten Kommando
    ptr = strtok(NULL,"|"); // suche noch ein Kommando...
    if (ptr == NULL) { // wenn nur ein Kommando
    handleCmd(inp[0],0,NULL); // gleich ausführen
    }
    else { // wenn noch ein zweiter Kommando
    inp[1] = ptr; // speichere auch zweiten Kommando
    inp[1] = inp[1]+1; /* ?????????????? */ // "entferne" das führende ' ' des zweiten Kommandos, welches '|' und Kommando trennt
    

    Das nur meine Vermutung. Ich glaube eine Pipe ohne folgendes Leerzeichen ist unzulässig.

    Strtok liefert dir den Zeiger auf das Zeichen nach '|', welches in deinem Beispiel ein ' '(<-Edit: Leerzeichen) sein muss. In diesem Leerzeichen liegt eigentlich kein Informationsgehalt und kann übergangen werden(inp[1]+1).


Anmelden zum Antworten