최근 수정 시각 : 2024-11-03 19:25:22

파이프(UNIX)


1. 개요2. 종류
2.1. 명명되지 않은(익명) 파이프2.2. 명명된 파이프

1. 개요

파이프(Pipe)는 주로 유닉스 시스템에서(윈도우의 경우 아래 내용 참조) 많이 쓰이는 IPC 구현 중 하나이다. 유닉스 호환 커널은 pipe(2)라는 시스템 콜로 파이프를 생성할 수 있다. 보통 많이 쓰이는 방식은 셸 내에서 한 프로그램의 출력 결과를 다음 프로그램으로 전달해서 데이터를 새롭게 가공시키는 것이다. 셸에서 " | " 앞뒤로 프로그램명이 나온다면 앞의 프로그램과 뒤의 프로그램 사이에 파이프가 생성되고, 앞의 결과가 뒤의 입력으로 들어간다. 단방향 명명되지 않은 파이프를 생성하여 앞의 프로세스의 결과를 뒤의 프로세스로 전달하는 과정이다.

사용 예시
$ ip addr show | grep enp3s0
- 현재 컴퓨터에 설치된 네트워크 인터페이스의 목록을 보여주는 ip addr show 명령의 결과가 "grep enp3s0"으로 전달되어 목록 중에 enp3s0 이름의 인터페이스를 보여준다.

거의 모든 주요한 OS가 다 Pipe라고 부르는 IPC를 지원하지만, OS별로 다른 작동 방식을 가지고 있다.

2. 종류

2.1. 명명되지 않은(익명) 파이프

Anonymous Pipe

OS에서 제공하는 기본적인 파일 기반 단방향 IPC이다. 쓰기만 가능한 커넥션과 읽기만 가능한 커넥션 2개로 구성되며, 보통 상속으로 둘 중 하나의 커넥션을 전달하여 통신한다. 유닉스는 커넥션으로 파일디스크립터를 반환한다. 양방향 통신을 하고 싶으면 이런 익명 파이프를 2개 만들면 된다.

유닉스의 경우 명명된 파이프와의 가장 큰 차이점은 소멸 시점이다. 익명 파이프의 경우 프로세스가 종료되면 그 프로세스의 커넥션(핸들 혹은 파일 디스크립터)를 OS가 찾아서 다 죽여버린다.

윈도우의 익명 파이프는 아무 이름이나 가진 명명된 파이프이다. 사용자가 볼 수 없는 최상위 폴더에 파이프 전용 파일 시스템을 가진 특수한 파일을 생성하고, 커넥션으로 그 파일의 핸들의 API를 제공한다. OS/2는? 몰라 그거 누가 쓴다고
윈도우의 익명 파이프 API 작동 문서

2.2. 명명된 파이프

Named pipe

기본적으로 명명된 파이프는 익명 파이프에 이름을 붙여서 특정할 수 있게 만든다는 컨셉에서 시작한 것이다. 이름을 붙여서 특정을 하였기 때문에 파이프의 이름으로 공유할 수 있는데, 막상 해 보면 별 차이는 없다...

유닉스의 경우, 익명 파이프와의 가장 큰 차이점은, 프로세스가 죽어도 명명된 파이프는 회수하지 않는 한 남아있다. 마운트 할 수 있는 일반적인 파일 취급을 해서 그런 듯?

윈도우의 경우는 파이프의 기본이 명명된 파이프이고, 익명 파이프는 아무 이름이나 설정한 파이프라서, 모든 API는 기본적으로 명명된 파이프용 API이다.

파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r21에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r21 (이전 역사)
문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)