source

dup2 및 pipe()를 사용하여 명령어 "ls -l | grep ^d | wc " 를 실행합니다.

gigabyte 2022. 9. 4. 22:03
반응형

dup2 및 pipe()를 사용하여 명령어 "ls -l | grep ^d | wc " 를 실행합니다.

#include<stdio.h>
#include<unistd.h>

int main()
{
    int fd1[2];
    pipe(fd1);

    if(!fork())
    {
        dup2(fd1[1],1);
        close(fd1[0]);
        execlp("ls" , "ls" ,"-l",(char*)0);
    }
    else{
        int fd2[2];
        pipe(fd2);
        dup2(fd1[0],0);
        close(fd1[1]);

        if(!fork()){
            dup2(fd2[0],0);
            close(fd2[0]);
            execlp("wc","wc",(char*)0);
        }
        else{
            dup2(fd2[1],1);
            close(fd2[0]);
            execlp("grep","grep","^d",(char*)0);
        }
    }
    return 0;
}

ls -l 명령어를 실행하는 자프로세스를 작성하려고 합니다.자프로세스는 파이프에서 부모로 전달되어 표준 출력이 아닌 파이프 엔드에서 읽혀져 grep ^d 명령어를 실행합니다.

왜 작동하지 않는지에 대한 오해가 없는 경우도 있지만, 그 반대의 경우도 완전히 정상적으로 동작하고 있습니다.

int main()
{
    int fd1[2];
    pipe(fd1);

    if(!fork())
    {
        dup2(fd1[1],1);
        close(fd1[0]);
        execlp("ls" , "ls" ,"-l",(char*)0);
    }
    else{
        int fd2[2];
        pipe(fd2);
        dup2(fd1[0],0);
        close(fd1[1]);

        if(!fork()){
            dup2(fd2[1],1);
            close(fd2[0]);
            execlp("grep","grep","^d",(char*)0);
        }
        else{
                dup2(fd2[0],0);
            close(fd2[1]);
            execlp("wc","wc",(char*)0);
        }
    }
    return 0;
}

언급URL : https://stackoverflow.com/questions/73597928/execute-the-command-ls-l-grep-d-wc-using-dup2-and-pipe

반응형