tgool
Tgool
tgool
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Science
      • AI
      • Data Mining
      • ML(Machine Learning)
    • Computer Science
      • 자료구조
      • 알고리즘
      • 시스템 프로그래밍
      • 운영체제
      • 컴퓨터 구조
      • 컴퓨터 네트워크
      • 데이터 베이스
      • 파이썬
      • 자바
      • 아두이노
    • Math
      • 통계학
      • 확률론
      • 선형대수학
      • 수리통계학
      • 회귀분석
    • TOFEL
    • Git
    • Plan
    • Book
    • Working out
      • 영양과 생활
      • 운동 정보
      • 운동 기록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
tgool

Tgool

Pipe와 Named Pipe
Computer Science/시스템 프로그래밍

Pipe와 Named Pipe

2022. 12. 22. 11:19

Pipe

- Uni-directional byte stream

- name or ID가 없음 -> unrelated process 간 사용 불가능

- related process 간에 사용 가능 (ex. fork())

- 한 프로세스 당 read, write의 일방향적 

Pipe

 

 

Pipe fork()

Pipe_fork())_Problem

- 위 그림은 오류 존재. Parent Process가 Child Process에게 데이터를 전송하려 할 때, 자신이 write한 데이터를 read해버릴 수 있음

Pipe_fork())_Solution

 - Parent Process의 read fd와 Child Process의 write fd를 close 시켜 일방향성 유지

 

 

 

Pipe APIs

int pipe(int pipefd[2]);

- pipe 생성

 

파라미터

- pipefd[2]: 생성될 pipe fd[2]를 저장할 버퍼

- pipefd[0]: reader-side fd

- pipefd[1]: writier-side fd 

 

반환값

- 성공시 0 리턴

- 실패시 -1 리턴

 

Pipe I/O

- pipe가 full 일 때 write 시도하면 blocking, 위에서 언급했듯이 Pipe는 Byte Stream으로 구성되어 있기 때문에 Pipe 내부가 꽉 차면 데이터를 더 저장할 수 없기 때문에 blocking됨.

- pipe가 empty일 때 read 시도하면 blocking

- write size가 PIPE_BUF보다 작으면 atomic(데이터가 방해받지 않고 온전히 저장) 크면 interleaved(데이터가 분리 되어 저장돼 분리된 중간 부분에 다른 데이터가 저장) 될 수 있음.

    ( Linux PIPE_BUF: 4KB

    ( multiple writier 환경에서 유의

 

Named Pipe(FIFO)

- Uni-directional byte stream

- 파일 경로가 ID

   ( unrelated process 간에도 사용 가능

- FIFO 생성과 open이 분리되어 있음

- open()시 read-side와, write-side가 동기화 됨

    ( 즉 , 양쪽 모두 open 시도가 있어야 성공, 만약 read만 open된 후 read는 write가 open을 하는 순간에 같이 성공하게 됨.

    ( open 시 O_NONBLOCK이 유용하게 사용될 수 있음, 기다리지 않고 먼저 열어 놓는 방법

Named Pipe

 

Named Pipe APIs

int mkfifo (const chat *pathname, mode_t mode);

    (named pipe 파일을 생성한다.

 

파라미터

- dpathname: 생성할 named pipe 파일 경로, 지정된 경로에 파일 생성됨

- mode: permisision, 파일이 갖게 되는 permission

 

반환값

- 성공시 0 리턴

- 실패시 -1 리턴

 

- named pipe 파일 생성 후 open,read,write 시스템 콜을 이용해야 IPC 가능

 

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

Named Pipe 사용 예시  (0) 2022.12.22
Pipe 사용 예시  (0) 2022.12.22
IPC란?  (0) 2022.12.22
    'Computer Science/시스템 프로그래밍' 카테고리의 다른 글
    • Named Pipe 사용 예시
    • Pipe 사용 예시
    • IPC란?
    tgool
    tgool

    티스토리툴바