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

+ Recent posts