IT 이야기/IT Tech

socketpair 와 pipe 를 통한 프로세스간 통신의 차이점

필넷 2009. 7. 31. 09:00
반응형
socketpair() 시스템 호출은 소켓이 주소 없이 서로 연결된 nameless socket pair(이름없는 소켓 쌍)를 생성한다.
단방향성을 갖는 읽기/쓰기용 file descriptor 쌍을 리턴하는 pipe 시스템 호출과 유사해 보이지만, 양방향성(full-duplex)을 갖는 한쌍의 socket descriptor를 리턴한다는 것이 주된 차이점이다.

따라서 pipe를 이용하여 프로세스간 통신을 하기 위해서는, 두개의 pipe를 생성 각각을 단방향 전송 용도로 사용한다.
pipe(파이프)를 사용한 프로세스간 통신 구현


① 두번의 pipe 호출로 pipe #1, pipe #2 를 생성
    ※ 각각의 pipe에 대하여 읽기용 file descriptor 와 쓰기용 file descriptor가 리턴된다.
② fork 를 수행
③ 부모 프로세스는 pipe #1 의 읽기용 file descriptor를 닫음(pipe #1은 쓰기 용도임)
④ 부모 프로세스는 pipe #2 의 쓰기용 file descriptor를 닫음(pipe #2는 읽기 용도임) 
⑤ 자식 프로세스는 pipe #1 의 쓰기용 file descriptor를 닫음(pipe #1은 읽기 용도임)
⑥ 자식 프로세스는 pipe #2 의 읽기용 file descriptor를 닫음(pipe #2는 쓰기 용도임)
⑦ 부모 프로세스에서 자식 프로세스로의 데이터 전송은 pipe #1을 통하고, 반대는 pipe #2를 통한다.



소켓 쌍으로 프로세스간 통신을 하기 위해서는...
① 한번의 socketpair 호출로 두개의 nameless socket 을 생성(즉, 두개의 socket descriptor가 리턴됨)
② fork 수행
③ 부모 프로세스는 socket descriptor #1 을 닫음
④ 자식 프로세스는 socket descriptor #2 를 닫음
⑤ 부모 프로세스는 데이터의 송수신을 socket descriptor #2를 이용함
⑥ 자식 프로세스는 데이터의 송수신을 socket descriptor #1을 이용함

반응형