2016-04-03 18 views
0
ben exec ve isimsiz boruları kullanarak bu komutu simüle etmek için bir C programı oluşturmak gerekir

:ls benzetimi bir C programında Broken Borular | sıralama | wc -l

ls | sort | wc -l 

Ama bu nasıl yapabilirim? gerçekten kötü

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 sadece boru çalışmaya başlar ve ben denedim: Eklenen kodum

cevap

2

Sen kullanarak her operasyonda kullanılmayan dosya tanımlayıcıları kapatmak gerekir: yakın (fd [0]) ;

+0

Kodunuzdan önce kod olarak görünmesi için başka bir satır eklemelisiniz. Cevabınızı daha da iyi hale getirmek için neden kapatmanız gerektiğini açıklayabilirsiniz. – migg