프로세스간에는 공유되는 메모리가 없어서 메모리로 통신을 하기를 힘들다.
그래서 커널에 파이프 생성을 요구하고, 요구해서 얻은 입출력 파일 디스크립터를
이용하여 프로세스 간의 통신을 한다.
unitsd.h
int pipe(int fd[2]);
리턴값 -1: 실패 0: 성공
인자: 정수형 배열 인자 2개를 같는 포인터
여기에서 fd를 인자로 전달하면 fd[0]은 출력할 수 있는 파일 디스크립터를, fd[1]에는 입력할
수 있는 파일 디스크립터를 얻는다. fd[0]은 출력이지만 프로그램 상에서는 입력을 의미,
fd[1]은 입력이지만 프로그램 상에서는 출력을 의미한다.
파이프는 프로세스에 종속되지 않는다. 이말은 프로그램 상에서 pipe함수를 사용하여 파이트
를 생성하는 경우 이것은 프로세스 내에 존재 하는 것이 아니라 커널 상에서 만들어 주며 단지
프로세스는 이 파이프를 사용할 수 있는 파일 디스크립터 2개를 커널로 부터 얻게된다. 이렇게
얻어진 파일 디스크립터를 이용하여 파이프를 사용하는 것이다.
파이프의 단점
파이프 생성해서 2개의 파일 디스크립터를 얻었을 경우 만약에 자식 프로세스를 생성하거나
디스크립트를 복사하는 경우 입력과 출력의 경계가 없다. 즉 프로그램 상에서 출력을 하여
파이프에 입력을 시켰을 때 반대편 파이프 출력에서 먼저 입력 받아서 데이터를 가져가는 것이
임자이다.
이러한 문제를 해결하기 위해서 파이프를 두개 복사하여 사용한다.
'dev, tech > System' 카테고리의 다른 글
int dup2(int fildes, int fildes2) (0) | 2007.03.17 |
---|
댓글