실제적으로 IPC를 사용하는 방법 살펴보기!
POSIX shared memory 사례
cf> fd = fopen()을 통해 파일을 열 경우, 일반적인 경우 HDD(하드디스크)의 스토리지 시스템에 영역을 잡게 된다.
POSIX는 memory-mapped files을 이용하는데, 이는 메모리에 파일을 생성해서 훨씬 빠른 속도로 읽을 수 있다. memory-mapped files를 사용하려면 다음과 같은 과정을 거친다.
먼저 공유 메모리를 메모리 영역에 생성해서,
read, write 하는 단위(chunk)의 크기를 정해주고,(ex > 4096)
memory-mapped file을 공유메모리에다가 mapping 시켜준다.
ex >
shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
⇒creat 및 read, write 권한을 준다.
ftruncate로 사이즈를 준다.(read, write 하는 청크 단위 사이즈 정해주기)
ptr = (char *)mmap(~~~,shm_fd, 0);
⇒ 메모리에 shared-file 영역을 주었다.(shm_fd가 메모리에 생성된 영역을 가리키게 된다)
sprintf(ptr, “%s”, message_0);
⇒ptr 포인터가 가리키는 영역에 message_0의 문자열을 write한다.
ptr += strlen(message_0);
⇒ message_0문자열의 길이 만큼 ptr이 가리키는 위치를 뒤로 이동시킨다.
소비자의 경우, shm 오픈 및 메모리 맵핑 시키는 것도 똑같다.