(본 강의 노트는 한빛 아카데미의 <유닉스 시스템 프로그래밍> 책을 기반으로 하고 있습니다)
학습목표
- 파이프를 이용한 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 |