파이프(UNIX)

덤프버전 :


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


1. 개요[편집]


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

사용 예시
$ 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 판{{{#!wiki style="display: inline; display: 2.2;"
, 2.2번 문단}}}에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r21 판{{{#!wiki style="display: inline; display: 2.2;"
, 2.2번 문단}}} (이전 역사)
문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)



파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-28 17:12:27에 나무위키 파이프(UNIX) 문서에서 가져왔습니다.