시스템 프로그래밍 - 이름 있는 파이프
1. 이름 있는 파이프
1) FIFO
- 리눅스에서는 Named PIPE 기법을 위해 FIFO 라는 특수 파일을 제공
- 부모-자식간이 아닌 독립적인 프로세스 간에 통신하기 위해서는 이름 잇는 파이프 사용
- FIFO로 사용할 특수파일을 명령이나 함수로 먼저 생성해야 함
(1) 특수 파일로 생성되는 FIFO
- 생성 방법에 차이는 있지만 PIPE와 거의 유사
- 익명의 파이프는 따로 이름이 없는 통신 채널인데 비해서 FIFO는 mkfifo()함수에 의해 실제로 생성되는 특수 파일
- 어떤 프로세스라도 생성된 경로로 파일에 접근하여 다른 파일을 사용하듯 읽거나 쓰기 가능
- FIFO로 pipe와 마찬가지로 단방향 통신, 반드시 읽기전용,쓰기전용 으로만 열어야 함
2) 명령으로 FIFO 파일 생성
(1) mknod 명령
- FIFO 파일/ 특수 파일 생성
- 형식 mknod filename p
3) 함수로 특수파일 생성
(1) 특수파일 생성 : mknod
#include <sys/stat.h>
int mknod(const char *path, mode_t mode, dev_t dev);
- path : 특수 파일을 생성할 경로
- mode : 특수 파일의 종류와 접근 권한 지정
(1-1) mode 생성할 특수파일의 종류 지정
- S_IFIFO : FIFO 특수 파일
- S_IFCHAR : 문자 장치 특수 파일
- S_IFDIR : 디렉토리
- S_IFDIR : 블록장치 특수파일
- S_IFREG : 일반 파일
(2) FIFO 파일 생성 : mkfifo
- path로 지정한 경로에 접근 권한을 지정해 FIFO 파일 생성
- 성공 : 0 반환
- 실패 : -1 반환
(2-1)
- mkfifo() 함수가 정상적으로 실행되면 인자로 넘긴 경로에 특수 파일로 FIFO가 등록됨
(2-2)
- 다른 프로세스는 일반 파일에서 사용하는 것 처럼 FIFO를 사용 가능하지만 특정 프로세스가 FIFO를 쓰기용으로
열기 전가지는 다른 읽기용 개방은 블럭(Block)됨
(2-3)
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const chat *pathname, mode_t mode);
(2-4)const char *pathname
- fifo 파일이 생성될 경로를 지정함
- 일반 파일의 경로를 지정하는 것과 동일
(2-5) mode_t mode
2. 이름 있는 파이프 관련 함수
1) FIFO로 데이터 주고받기
- FIFO 파일을 생성하면 저수준 파일 입출력 함수로 파일을 읽거나 쓸 수 있음
댓글남기기