본문 바로가기
운영체제

파이프(Pipe)

by meanjung 2022. 2. 11.

파이프 개념

  • 두 프로세스가 통신할 수 있게 하는 전달자로서 동작한다.

파이프 종류

1. 일반 파이프(익명 파이프, anonymous pipe)

  • pipe(int fd[]) 함수
    • fd[]를 통해 접근되는 파이프를 생성한다.
    • fd[0] : 읽기 전용 / fd[1] : 쓰기 전용
  • 단방향
  • 통신하는 두 프로세스는 부모-자식 관계여야 한다.
    • 파이프를 생성한 프로세스 이외에는 접근할 수 없기 때문에 
    • 통상적으로 부모 프로세스가 파이프를 생성하고, fork()로 생성한 자식 프로세스와 통신하기 위해 사용한다.
  • 생산자-소비자 형태로 두 프로세스 간의 통신을 허용한다. (읽고 - 쓴다)
  • fork() 함수에 의해 복사되지 않는다.
    • fork() 함수에 의해 프로세스가 생성되면 file descriptor를 공유하게 된다. 
    • 부모 프로세스와 자식 프로세스가 같은 파이프를 가리킨다.
  • 한쪽으로만 데이터를 전송할 수 있으며, 오직 단방향 통신만 가능하다.
  • 만일 양방향 통신이 필요하다면 각각 다른 방향으로 데이터를 전송할 수 있는 두 개의 파이프를 사용해야 한다.
  • 참고 : https://velog.io/@t1won/Unix-pipe
 

[Unix] pipe

파이프(Pipe)란 프로세스간 통신을 할 때 사용하는 커뮤니케이션의 한 방법이다.pipe를 이용하면 2개의 파일 지시자를 생성할 수 있다. 2개가 생성되는 이유는 읽기 전용과 쓰기 전용의 파이프를

velog.io

2. 지명 파이프(named pipe)

  • 일반 파이프는 한 쌍의 프로세스가 통신할 수 있는 간단한 기법을 제공하지만 오로지 프로세스들이 서로 통신하는 동안에만 존재한다.
  • named pipe는 좀 더 강력한 통신 도구를 제공한다.
  • 양방향 통신이 가능하며, 부모-자식 관계도 필요로 하지 않는다.
  • named pipe가 구축되면 여러 프로세스들이 이를 사용해 통신할 수 있다.
  • 통신 프로세스가 종료되더라도 named pipe는 계속 존재하게 된다.

 

댓글