계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

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

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

2020. 11. 23. 12:58
반응형

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

 

학습목표

- 파이프를 이용한 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

    티스토리툴바