11-1. 프로세스간 통신(Inter-Process Communication)
프로세스간 통신의 정의
독립된 프로세스 간에 데이터를 주고 받는 행위를 의미
프로세스간 통신의 문제점
독립된 프로세스는 (특정 시스템콜을 하지 않는한) 공유 메모리가 존재하지 않기 때문에 데이터를 주고 받는 것이 불가능.
해결책 : 독립된 프로세스들이 통신할 수 있도록 '파이프'를 제공.
파이프 생성함수
#include <unistd.h>
int pipe(int fd[2]);
파이프는 커널 객체이다. fd[1]은 파이프 입구, fd[0]은 파이프 출구로 사용한다.
리턴 : 성공시 0, 실패시 -1
파이프의 생성과 프로세스간 통신
파이프의 특징
1. 파이프는 fork 함수에 의해서 복사되지 않는다.
-> 파이프의 입출력을 의미하는 파일 디스크립터가 복사되는 것.
2. 파이프는 방향성이 존재하지 않는다.
-> 파이프의 입구와 출구만 있다. (자신이 쓰고 읽을 수 있는 문제 발생 가능)
양방향 통신을 위한 파이프의 생성
하나의 파이프는 하나의 용도로만 사용한다.
예시) A->B 파이프, B->A 파이프
11-2. 가위 바위 보 게임 구현하기
가위 바위 보 게임 구조
1단계 : 파이프 생성
2단계 : 자식 프로세스 생성
3단계 : (서버, 클라이언트 모두) 데이터 입력(가위 바위 보 선택)
4단계 : 파이프를 통해 데이터 전송(자식->부모)
5단계 : 승자 확인!
6단계 : 결과 전송(부모->자식)