min's devlog
파이프 기반의 프로세스간 통신 본문
파이프 ( | )
-프로세스와 프로세스간의 통신 채널
예) 명령어 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]);
}
'Linux > TCP IP Socket Programming' 카테고리의 다른 글
메시지 수신 프로세스 (0) | 2021.04.10 |
---|---|
UDP 에코 서버 (0) | 2021.04.10 |
SIGCHLD, wait() (0) | 2021.04.09 |
alarm() 인터럽트 (0) | 2021.04.09 |
System Call 수행 중 함수 처리 (0) | 2021.04.09 |
Comments