konsoloen ausgabe mit pipes umlenken



  • hallo,

    ich will oder muss den folgenden konsolen Befehl in C nach Programmieren.

    ls -lR | sort
    

    Das Problem ist das ich keine Ausgabe von sort bekommme. Sieht jmd. wo der Fehler ist?

    int fds[2];
    pipe(fds);
        pids[0] = fork();
        if( pids[1] == 0)
        {
            //child process 2
            dup2(fds[0][0],0);
            dup2(fds[1][1],1);
            check_close(fds[0][0]);
            check_close(fds[0][1]);
            check_close(fds[1][0]);
            check_close(fds[1][1]);
    
            execlp("sort","sort",NULL);
            perror("sort");
            exit(1);
        }
    
        pids[1] = fork();
        if(  pids[0] == 0)
        {
            //child process 1
            dup2(fds[0][1],1);
            check_close(fds[0][0]);
            check_close(fds[0][1]);
            check_close(fds[1][0]);
            check_close(fds[1][1]);
    
            execlp( "ls","ls","-lR",NULL);
            perror("ls");
            exit(1);
        }
    
        check_close(fds[0][0]);
        check_close(fds[0][1]);
        check_close(fds[1][0]);
        check_close(fds[1][1]);
    
        wait(0);
        wait(0);
    


  • pids[0] = fork();
        if( pids[1] == 0)
    

    Wenn Du ganz genau hinschaust, dann kommst Du darauf.

    Ausserdem wundert mich, wenn der Compiler hier keine Fehlermeldung ausspuckt:

    int fds[2];
    ...
    dup2(fds[0][0],0);
    

    fds ist ein Array mit 2 Elementen vom Typ int. fds[0] ist also ein int. Was fds[0][0] sein soll weiß ich nicht und vermutlich der Compiler auch nicht.

    Im übrigen ist eine Fehlerprüfung immer ratsam. Und wenn Du mit gcc arbeitest, dann immer schön die Option -Wall mit geben. Ich verwende zusätzlich noch die Option -pedantic.

    Tntnet



  • man da hab ich aber was Übersehen. Danke funktioniert jetzt bestens danke


Anmelden zum Antworten