12. 파이프

김동웅·2021년 12월 9일
0

UNIX

목록 보기
13/14

핵심 개념

  • 파이프는 데이터를 한 방향으로 보내는데 사용
  • 파이프는 두 개의 파일 디스크립터를 갖는다.
    ( 하나는 쓰기용, 하나는 읽기용 )
  • 이름 있는 파이프는 파일처럼 파일 시스템 내에 존재하고 이름이 있으며 서로 관련 없는 프로세스들도 공유하여 사용할 수 있다.

1. 파이프

  • $ who | sort
  • 파이프
    : 물을 보내는 수도 파이프와 비슷
    : 한 프로세스는 쓰기용 파일 디스크립터를 이용하여 파이프에 데이터를 보내고(쓰고), 다른 프로세스는 읽기용 파일 디스크립터를 이용하여 그 파이프에서 데이터를 받는다(읽는다).
    : 한 방향 통신

파이프 생성

  • 파이프는 두 개의 파일 디스크립터를 갖는다.
  • 하나는 쓰기용 이고 다른 하나는 읽기용이다.
#include <unistd.h>
int pipe(int fd[2])
파이프를 생성한다. 성공하면 0을 실패하면 -1을 반환한다.

파이프 사용법

(1) 한 프로세스가 파이프를 생성한다.
(2) 그 프로세스가 자식 프로세스를 생성한다.
(3) 쓰는 프로세스는 읽기용 파이프 디스크립터를 닫는다.
읽는 프로세스는 쓰기용 파이프 디스크립터를 닫는다.
(4) write()와 read() 시스템 호출을 사용하여 파이프를 통해 데이터를 송수신한다.
(5) 각 프로세스가 살아 있는 파이프 디스크립터를 닫는다.

: 쓰기용 파이프 디스크립터 fd[1]
: 읽기용 파이프 디스크립터 fd[2]

2. 쉘 파이프 구현

표준출력을 파이프로 보내기

  • 자식 프로세스의 표준출력을 파이프를 통해 부모 프로세스에게 보내려면 어떻게 해야 할까?
    : 쓰기용 파이프 디스크립터 fd[1]을 표준출력을 나타내는 1번 파일디스크럽터에 복제 ( dup2(fd[1],1) )

쉘 파이프 기능

❗ [shell] command1 | command2
: 자식 프로세스가 실행하는 command1의 표준출력을 파이프를 통해 부모 프로세스가 실행하는 command2의 표준입력으로 전달

0개의 댓글

관련 채용 정보