Linux/TCP IP Socket Programming
파이프 기반의 프로세스간 통신
값진
2021. 4. 10. 01:56
파이프 ( | )
-프로세스와 프로세스간의 통신 채널
예) 명령어 ps가 중간의 파이프를 통해 grep이라는 프로세스에게 전달하는 방식
ps -ef |grep : 이 컴퓨터의 모든 프로세스 상태를 보여준다. (화면단위로 보려면 ps -ef | more)
-파이프를 이용한 프로세스간의 통신
파이프 생성
파이프를 열기 위해서는 pipe()를 사용한다.
하나의 파이프를 생성하면 두개(읽기, 쓰기)의 파일 디스크립터가 생성된다.
#include<unistd.h>
int pipe(int fd[2]); //배열
(fd[0]은 읽기용-read, fd[1]은 쓰기용-write)
부모프로세스를 예로 들면, fd[1]을 write로 쓰고 fd[0]을 read로 쓰는데
단방향, 한 방향에 하나만 선택해서 사용할 수 있다. (-단방향 스트림 채널만 제공)
양방향 통신을 위해서는 추가적인 파이프를 생성해야한다
또 write모드를 쓰려면 read모드를 close 해준 후 사용한다.
파이프 생성 코드
int fd[2]; //정수형 배열 선언
pid_t pid;
pipe(fd); //이 배열을 파이프로 쓰겠다-하고 파이프 함수 지정 //바로 파이프로 이용 가능
if ((pid=fork())<0) {
exit(0);
}
else if (pid>0) {
close(fd[0]); //부모프로세스 : 읽기용 파일 디스크립터 제거
}
else if(pid==0) { //자식 프로세스 : 쓰기용 파일 테스크립터 제거
close(fd[1]);
}