파이프는 프로세스끼리의 통신(IPC)를 할 때 사용되는 방법 중 하나입니다. pipe()로 생성하는 파이프는 프로세스 내에 생성되는 것이 아닌 커널에 생성되며 파이프를 사용할 수 있는 파일 디스크립터만 프로세스에게 주어지게 됩니다. 그러므로 하나의 프로세스가 파이프를 생성하고, 그 파이프의 파일 디스크립터를 사용하여 프로세스간 통신을 할 수 있게 됩니다. 여기서 생성된 파이프에서 신경써야 할 것은 바로 파이프의 입출력 방향이 이미 결정되어 있다는 것입니다. 따라서 파이프를 생성하면 이를 이용할 수 있는 2개의 파일 디스크립터가 만들어지게 됩니다.
pipe함수의 원형은 int pipe(int fd[2]) 입니다. 인자로 들어오는 두 개의 파일 디스크립터 중 fd[0]은 파이프의 읽기 전용 파일 디스크립터이고, fd[1]은 쓰기 전용 파일 디스크립터 입니다. 읽기 전용 파일 디스크립터로 쓰기를 할 수 없고 그 반대 역시 가능하지 않습니다. 여기서 통신을 하려면 서로 생성한 파일 디스크립터를 알아야 하기 때문에 부모 자식 관계의 프로세스에서만 사용할 수 있습니다. 완전히 다른 프로그램의 프로세스끼리 통신하려면 FIFO라는 것을 사용해야 합니다. 아래는 각 부모와 자식에게 메시지를 전송하는 예제입니다.
이렇게 짜고 컴파일 하여 실행시켜 보면
이렇게 서로 메시지를 주고 받는 것을 볼 수 있습니다.
'Programming > Linux' 카테고리의 다른 글
자식프로세스 생성 - fork() (0) | 2015.12.03 |
---|