[유닉스 시스템 프로그래밍] Ch09. 파이프

2020. 11. 23. 12:58·Computer Science/유닉스프로그래밍

(본 강의 노트는 한빛 아카데미의 <유닉스 시스템 프로그래밍> 책을 기반으로 하고 있습니다)

 

학습목표

- 파이프를 이용한 IPC 기법을 이해한다

- 이름 없는 파이프를 이용해 통신 프로그램을 작성할 수 있다

- 이름 있는 파이프를 이용해 통신 프로그램을 작성할 수 있다 

 

목차

1. 파이프의 개념

2. 이름없는 파이프 만들기

3. 복잡한 파이프 생성

4. 양방향 파이프 활용

5. 이름있는 파이프 만들기


1. 파이프의 개념


파이프

- 두 프로세스 간에 통신할 수 있도록 해주는 특수 파일

- 그냥 파이프라고 하면 일반적으로 이름없는 파이프를 의미

- 이름없는 파이프는 부모-자식 프로세스 간에 통신할 수 있도록 해줌

- 파이프는 기본적으로 단방향

2. 이름없는(간단한) 파이프 생성


파이프 생성 : popen()

#include <stdio.h>

FILE *popen(const char *command, const char *mode);

파이프 닫기: pclose()

#include <stdio.h>

int pclose(FILE *stream);

3. 복잡한 파이프 생성


파이프 만들기 : pipe()

#include <unistd.h>

int pipe(int fildes[2]);

- 파이프로 사용할 파일기술자 2개를 인자로 지정

- fildes[0]는 읽기, filedes[1]은 쓰기용 파일 기술자

 

파이프 함수로 통신과정

1. 파이프 함수를 호출하여 파이프로 사용할 파일 기술자 생성

2. fork 함수로 자식 프로세스 생성. pipe도 자식 프로세스로 복사됨

*단, 아래와 같이 파이프 한 방향에서는 read 혹은 write만 일어나야 함(따라서 위 그림보다는 아래 그림이 좀 더 정확)

3. 통신 방향 결정(파이프는 기본적으로 단방향)

 

4. 양방향 파이프 활용


여러 파이프의 활용

양방향 통신

파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다


5. 이름 있는 파이프


이름 있는(named) 파이프

- 부모-자식 간이 아닌 독립적인 프로세스 간에 통신하기 위해서는 이름 있는 파이프 사용

- 이름 있는 파이프는 FIFO라고도 함

- FIFO로 사용할 특수 파일을 명령이나 함수로 먼저 생성해야 함

 

명령으로 FIFO 파일 생성

mknod 명령

: mknod file_name p

mkfifo 명령

: /usr/bin/mkfifo [-m mode] path...

함수로 특수파일 생성

특수 파일 생성 : mknod()

#include <sys/stat.h>

int mknod(const char *path, mode_t mode, dev_t dev);

mode : 생성할 특수파일의 종류 지정

•S_IFIFO : FIFO 특수 파일

•S_IFCHAR : 문자장치 특수 파일

•S_IFDIR : 디렉토리

•S_IFDIR : 블록장치 특수파일

•S_IFREG : 일반파일

FIFO 파일 생성 : mkfifo()

#include <sys/types.h>
#include <sys/stat.h>

int mkfifo(const char *path, mode_t mode);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'Computer Science > 유닉스프로그래밍' 카테고리의 다른 글

Pthread 개념  (0) 2020.12.06
[유닉스 시스템 프로그래밍] Ch10. 시스템V의 프로세스간 통신  (0) 2020.11.28
[유닉스 시스템 프로그래밍] Ch08. 메모리 매핑  (0) 2020.11.16
[유닉스 시스템 프로그래밍] Ch07. 시그널  (0) 2020.11.04
[유닉스 시스템 프로그래밍] Ch06. 프로세스 생성과 실행  (0) 2020.10.19
'Computer Science/유닉스프로그래밍' 카테고리의 다른 글
  • Pthread 개념
  • [유닉스 시스템 프로그래밍] Ch10. 시스템V의 프로세스간 통신
  • [유닉스 시스템 프로그래밍] Ch08. 메모리 매핑
  • [유닉스 시스템 프로그래밍] Ch07. 시그널
계속지나가기
계속지나가기
NLP Engineer
  • 계속지나가기
    코딩스뮤
    계속지나가기
  • 전체
    오늘
    어제
    • 코딩스뮤:)
      • Algorithm
        • 백준 문제풀이
        • 프로그래머스 문제풀이
        • 알고리즘 이론
        • 자료구조
        • SW Expert Academy
      • 인공지능(AI)
        • LLMs
        • 자연어처리(NLP)
        • 컴퓨터비전(CV)
        • 딥러닝(DL)
        • 머신러닝(ML)
        • 인공지능기초수학
        • 선형대수학
      • 컴퓨터 세팅
      • Computer Science
        • 유닉스프로그래밍
        • 프로그래밍언어론
        • 디자인패턴
        • 클린코드
        • SW 영어
        • 리눅스
        • 논리회로
      • Server
        • Docker
  • 블로그 메뉴

    • 홈
    • Who Am I(CV)
    • 태그
  • 링크

    • 깃허브 주소
  • 공지사항

  • 인기 글

  • 태그

    최대유량
    손실함수
    DIP
    디지털이미지처리
    알고리즘
    networkflow
    비용함수
    DigitalImageProcessing
    MaximumFlow
    machinelearning
    네트워크플로우
    f1-score
    머신러닝
    비지도학습
    파이썬 클린코드
    선형회귀
    경사하강법
    ComputerVision
    에지검출
    ML
    지도학습
    결정경계
    기계학습
    패턴인식
    군집화
    LM
    컴퓨터비전
    NLP
    언어모델
    SIFT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
계속지나가기
[유닉스 시스템 프로그래밍] Ch09. 파이프

티스토리툴바