본문 바로가기
[ ★ ]Study/Programming

c언어 pipe 란

by nroses-taek 2017. 9. 12.
반응형
pipe()

프로세스는 메모리가 독립적으로 존재하기 때문에 메모리를 프로세스간 통신을 하는 것은 불가능하다.
fork()를 이용하여 server 혹은 client 쪽에서 생성된 프로세스들은 프로그램내에서 프로세스끼리 데이터를 주고 받을 방법이 없다는 것을 뜻한다. 이에 대한 해결책이 'pipe()' 라는 함수를 사용하는 것인데, 이를 사용함에 따라 서로 독립된 프로세스들이 데이터를 주고 받을 수 있게 된다.

pipe() 란
- 하나의 파이프 및 파이프에 대한 두 개의 파일 디스크립터가 생성
- 하나의 파이프를 프로세스들이 공유

#include <unistd.h>
int pipe(int fd[2]);
성공시 0, 실패시 -1

fd : 크기가 2인 int 형 배열을 요구
-fd[0] : 함수 호출 후 fd[0]에 데이터를 입력 받을 수 있는 파일 디스크립터가 담김(파이프 출구)
-fd[1] : 함수 호출 후 데이터를 출력할 수 있는 파일 디스크립터다 담긴다(파이프 입구)


파이프의 특징
  1. 파이프 자체는 fork함수에 의해 복사되지 않는다.
  2. 파이프는 방향성이 존재하지 않는다.

아래 그림은 양방향 통신의 그림이다.
파이프는 2가지의 양끝을 가지며, 하나는 write 하나는 read이다. 이것은 pipe()함수로 생성할 수 있다.
read는 fd[0], write는 fd[1]이다.


양방향 통신
- A프로세스에서 B프로세스로 데이터를 전송하기 위한 파이프하나
- B프로세스에서 A프로세스로 데이터를 전송하기 위한 파이프하나

양방향 통신도 한 번 해보시기를 추천합니다.

====================실습=======================

자식에서 write하고 부모에서 read하고 다시 write해서 자식프로세스에서 read하는 프로그램.
위의 특징과 비교하여 설명하자면 pipe함수는 fork함수에 의해 2개 3개로 늘어나지 않고 하나만 존재한다.
그리고 출구와 입구가 지정되어 있어서 출구로 데이터가 들어갈 수 없다.

위에는 프로그램 실행결과

아래는 코드 :D



반응형

'[ ★ ]Study > Programming' 카테고리의 다른 글

Stack 이란  (0) 2017.09.16
fatal error: sys/cdefs.h: No such file or directory 해결법  (0) 2017.09.15
C언어 strtok 함수  (0) 2017.08.16
undefined reference to `pthread_create'  (0) 2017.06.23
inet_ntoa 에러  (0) 2017.06.11

댓글