dup()함수와 pipe()함수 fork()함수에 대한 정리

2021. 5. 19. 16:1242seoul/minishell

int main(int argc, char **argv, char *envp[])
{
    int x;
    pid_t pid;
    int fd[2];
    int fd2;
    x = 0;


    pipe(fd);
    printf("%d, %d\n", fd[0], fd[1]);

    pid = fork();//자식 생성
    if (pid > 0)//부모일 경우
    {
        dup2(fd[1], 1);//표준출력 1이 fd[1]을 복제(고정)한다.
        //dup2함수
//      int dup2(int fd, int fd2);
//      #include <unistd.h>
//      fd2가 fd를 복제한다
        write(fd[1], "hello\n", 6);//컴퓨터는 hello를 fd[1]을 통해서 읽는다.

        waitpid(pid, 0, 0);//자식이 끝날때까지 기다림
    }
    else if (pid == 0)
    {
        char ch[100];//buffer를 만들고
        dup2(fd[0], 0);//(컴퓨터가)표준입력을 통해서 fd[0]에 복제(고정)한다.
        read(0, ch, 6);//read함수로 ch버퍼를 읽음(컴퓨터가)
        sleep(2);//2초동안 기다림
        write(1, ch, 6);//표준출력(컴퓨터가)으로 ch를 읽어들임
    }

    return (0);
}

 

  • int dup2(int fd, int fd2); 
    • #include <unistd.h>
    • fd2가 fd를 복제한다
  • int pipe(int fd[2])
    • #include <unistd.h>
    • 독립된 프로세스들이 데이터를 주고 받을 수 있게 된다.
    • fd[1] : 쓰기용 파이프, fd[0] : 읽기용 파이프
  • pid_t fork(void);
    • #include <unistd.h>
    • 프로세스를 호출하고자 할 때 사용
    • 자식프로세스 생성할 때 사용

'42seoul > minishell' 카테고리의 다른 글

main함수 세번째 인자  (0) 2021.05.19