728x90
프로세스 간 통신(IPC)
- 독립된 프로세스 간 데이터를 주고 받음 => 메모리를 공유함
-> 공유되는 메모리 공간안에 프로세스가 데이터를 가져다 놓고 가져가게 됨
- 프로세스 메모리 영역은 OS에 의해 분리되어 있음
-> 다른 프로그램의 영향을 미치는 것을 방지하기 위함(안전성)
- 두 프로세스 사이에 데이터 전달이 가능하려면 두 프로세스가 함께 공유하는 메모리가 존재해야 함
파이프 기반의 프로세스 통신
- 파이프 : 운영체제가 마련해주는 별도의 메모리 공간
-> filedes : 파일 디스크립터 배열을 전달하여 filedes[0]은 데이터를 수신하는데 사용하는 출구가 되고 filedes[1]은 전송하는데 사용하는 입구가 됨
#include <unistd.h>
int pipe(int filedes[2]);
- 파이프의 입출구에 해당하는 파일 디스크립터를 부모와 자식이 모두 가지고 있기 때문에 하나의 파이프를 이용해서 양방향 송수신하는 것은 위험할 수 있음
- 그것을 방지하기 위해 파이프를 따로 만들어 부모와 자식이 write할 때 사용하는 파이프를 따로 관리
#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30
int main(int argc, char *argv[])
{
int fds1[2], fds2[2];
char str1[]="Who are you?";
char str2[]="Thank you for your message";
char buf[BUF_SIZE];
pid_t pid;
pipe(fds1), pipe(fds2);
pid=fork();
if(pid==0)
{
write(fds1[1], str1, sizeof(str1));
read(fds2[0], buf, BUF_SIZE);
printf("Child proc output: %s \n", buf);
}
else
{
read(fds1[0], buf, BUF_SIZE);
printf("Parent proc output: %s \n", buf);
write(fds2[1], str2, sizeof(str2));
sleep(3);
}
return 0;
}
728x90
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 12-2. select 함수의 이해와 서버의 구현 (0) | 2021.03.08 |
---|---|
열혈 TCP/IP 12-1. IO 멀티플렉싱 기반의 서버 (0) | 2021.03.05 |
열혈 TCP/IP 10-5. TCP의 입출력 루틴(Routine) 분할 (0) | 2021.03.01 |
열혈 TCP/IP 10-4. 멀티태스킹 기반의 다중접속 서버 (0) | 2021.03.01 |
열혈 TCP/IP 10-3. 시그널 핸들링 (0) | 2021.03.01 |