IPC - 파이프(PIPE)의 개념
Language/C 2011. 9. 16. 09:30이번에는 IPC 기법 중 PIPE 에 대하여 알아보도록 하겠습니다.
파이프의 느낌은 슈퍼마리오의 게임에서 파이프를 타고 입구와 출구를 오가는 그런 느낌이죠.
IPC 에서 PIPE 를 간단하게 설명한다면,
여러개의 프로세스가 공통으로 사용하는 임시공간이라고 할 수 있습니다.
그리고 그 임시 공간은 실제로 파일 시스템에 생성되는 임시 파일입니다.
하나의 프로세스가 파이프에 쓰게 되면 다른 프로세스는 그 파이프에서 읽는 방식으로 쓰게 됩니다.
위에 그림처럼 파이프는 시스템 내부에서 관리하는 임시 파일을 이용하므로,
다른 IPC 기법 중 하나인 SIGNAL 과는 다르게 대용량의 메시지도 전송이 가능합니다.
이런 파이프는 보통 익명의 파이프와 이름을 가진 Named Pipe 의 두가지 방법으로
사용할 수 있도록 OS 가 제공 합니다.
파이프는 소켓 등의 비하면 꽤 단순한 IPC 기법으로 여러가지 특징을 가지고 있습니다.
그중 첫번째 특성은, 파이프는 입구와 출구의 개념이 없다는 것입니다.
파이프는 단순한 통로 입니다.
방향성이 없기 때문에 자신이 쓴 메시지를 자신이 읽을 수 있다는 것을 항상 유의해야 합니다.
그렇기 때문에 두개의 프로세스가 통신할 때는
읽기전용 파이프와 쓰기 전용 파이프의 두 개의 파이프를 쓰게 됩니다.
두개의 파이프를 생성하고, 한쪽 파이프를 일부러 닫아 버리는 것이지요.
그래서 결국은 아래 그림처럼 파이프를 두개 생성하여 하나의 방향으로만 갈 수 있도록 합니다.
또 파이프의 특성 중 유의할 것은 파이프는 fork() 함수에 의해 복사 되지 않는다는 것입니다.
fork() 함수에 의해서 프로세스가 생성되면, 자식 프로세스는 부모가 사용하던 변수를 복사하게 됩니다.
하지만 파이프의 경우 복사되는것이 아니라 File Descriptor 를 공유하게 됩니다.
즉 자식 프로세스와 부모 프로세스가 같은 파이프를 가리키게 됩니다.
그외에도 익명의 파이프는 또 하나의 주요한 특성이 있습니다.
부모 자식프로세스 사이에서만 파이프를 사용 가능하다는 것입니다.
파이프는 운영체제에서 임시로 생성되는 파일이고, 접근 가능한 방법은
File Descriptor(파일 디스크립터) 를 공유하는 방법만이 존재합니다.
익명의 파이프는 부모와 자식 프로세스만이 파일 디스크립터를 공유하므로
다른 프로세스는 파이프를 사용하여 통신이 불가능 합니다.
반면 Named PIPE(네임드 파이프) 의 경우 다른 프로세스도,
지정한 이름으로 파일 디스크립터를 열수 있기 때문에,
부모 자식 프로세스 간이 아니더라도 사용할수 가 있는 것이죠.
출처:
http://akj61300.blog.me/80133137262
[출처] IPC - 파이프(PIPE)의 개념|작성자 마이정
'Language > C' 카테고리의 다른 글
getopt()와 optarg, optopt (0) | 2011.11.02 |
---|---|
시리얼 통신 - 자료 수신을 위한 poll (0) | 2011.09.16 |
IPC - 리눅스 Named PIPE 사용법 (FIFO) (0) | 2011.09.16 |
named pipe / FIFO (0) | 2011.09.15 |
01. 링킹의 기본 이해 (0) | 2011.09.08 |