簡體   English   中英

模擬ls的C程序中的管道中斷 排序 wc -l

[英]Broken Pipes in a C program that simulates ls | sort | wc -l

我需要創建一個C程序來使用exec和未命名管道模擬此命令:

ls | sort | wc -l

但是我該怎么辦呢? 我才剛剛開始研究管道,但是我嘗試得很糟糕

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

編輯:添加了我的代碼

您需要使用以下命令關閉每個操作中未使用的文件描述符:close(fd [0]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM