8. 프로세스간 통신
프로세스간 통신(IPC : Inter Process Communication)
- Pipe, Message Queue, Semaphore, Shared Memory
8.1 Pipe (파이프)
파이프(Pipe)는 운영체제가 제공하는 프로세스간 통신 채널로서 특별한 타입의 파일로 볼수 있다.
파이프는 메모리에 저장되는 것이 아니라 운영체제가 관리하는 임시 파일이며 프로세스간 데이터 전달용으로 사용됨
송신측(송신 프로세스)에서는 파이프에 데이터를 쓰고 수신측에서는 파이프에서 데이터를 읽음으로써 프로세스간 통신이 이루어진다.
파이프는 스트림 채널을 제공하는데 파이프를 통해 송신된 데이터는 바이트 순서가 유지되어 수신측에서 읽을 수 있다.
같은 컴퓨터 내의 프로세스간에 스트림 채널을 제공한다.
8.1.1. 파이프 생성
pipe() 함수 사용
하나의 파이프를 생성하면 두 개의 파일 디스크립터가 만들어지는데 한 파일 디스크립터로는 쓰기를, 다른 파이 디스크립터로는 읽기를 함으로써 이 파이프를 통해 프로세스 사이에 메시지를 전달할 수 있음.
- #include <unistd.h>
- int pipe(int fd[2]);
W. Richard Stevens: Advanced Programming in the UNIX Environment 책 참고 바람 (3학년 과제 참고)
- int fd[2];
- pid_t pid;
- pipe(fd);
- if ((pid = fork()) < 0) { // create child process
- exit(0);
- }
- else if (pid > 0) {
- // Parent process는 읽기용 file descriptor를 제거
- close(fd[0]);
- }
- else if (pid == 0) {
- // Child process에서는 쓰기용 file descriptor를 제거
- close(fd[1]);
- }
※ Pipe는 단방향 스트림 채널만 제공한다는 것이다. 양방향 통신을 하려면 Pipe를 생성해줘야 한다.
(0)
(
