2016-04-03 8 views
0

Ich brauche ein C-Programm erstellen diesen Befehl exec und unbenannte Pipes zu simulieren:Defekte Pipes in einem C-Programm, das ls | simuliert sortieren | wc -l

ls | sort | wc -l 

Aber wie kann ich das tun? Ich habe erst beginnen, Rohre zu studieren, und ich habe versucht, wirklich schlecht

int main(int argc, char** argv) 
{ 
    int fd1[2], fd2[2],fd3[2], pid; 

    createPipe(fd1); 
    createPipe(fd2); 
    createPipe(fd3); 

    pid=babyMaker(); 

    if (pid == 0) 
    { 
    dup2(fd2[0],0); 
    dup2(fd3[1],1); 
    execlp("wc","wc","-l",NULL); 
    } 

    pid=babyMaker(); 

    if (pid == 0) 
    { 
    dup2(fd2[1], 1); 
    dup2(fd1[0], STDIN_FILENO); 
    execlp("sort", "sort", NULL); 
    } 

pid=babyMaker(); 

if (pid == 0) 
{ 
    dup2(fd1[1], 1); 
    execlp("ls", "ls", "-la", NULL); 
} 

char string[BUFFER_SIZE]; 
int bytesReaded=read(fd3[0],string,BUFFER_SIZE); 
string[bytesReaded-1]=0; 
printf("%s\n",string); 

wait(NULL); 

return 0; 
} 

EDIT: Hinzugefügt meinen Code

Antwort

2

Sie müssen die nicht verwendeten Datei-Deskriptoren in jedem Betrieb schließen ein: close (fd [0]) ;

+0

Sie sollten vor Ihrem Code eine weitere Zeile hinzufügen, damit sie als Code angezeigt wird. Und um Ihre Antwort noch besser zu machen, können Sie erklären, warum Sie es schließen müssen. – migg