3. 공유 메모리
공유 메모리는 프로세스와 프로세스 사이에 공유할 수 있는 메모리 공간을 지정하는 방법.
공유 메모리 사용 과정 :
- 공유 메모리 객체를 만드는 과정
- 공유 메모리의 객체의 크기를 설정하는 과정
- 공유 메모리 객체를 프로세스 메모리 영역과 맵핑하는 과정
공유 메모리 객체 생성
int shm_open(const char *name, int oflag, mode_t mode);
name : 공유 메모리 객체를 지시하기 위한 이름
oflag : int 형 비트 마스크로 open되는 공유 메모리의 특성 설정(fcntl.h에서 정의)
mode : 권한 정보를 설정하기 위한 데이터형(sys/stat.h에서 정의)
shm_open함수는 특정 이름을 갖는 공유 메모리 객체를 생성한 후에 그 객체에 접근할 수 있는 파일 디스크립터를 반환.
open함수와 마찬가지로 만약 같은 이름을 같는 객체가 이미 존재한다면 그 객체를 지시하는 파일 디스크립터를 반환.
두번째 인자 oflag는 open 계열 함수에서 공통적으로 사용되는 인자로 객체의 읽기 쓰기 속성과 open이 실행될 때의 행동들을 정의.
공유 메모리의 크기 지정
int ftruncate(int fd, off_t length);
fd : 잘라낼 파일의 디스크립터
length : 잘라내려고 하는 크기
성공 시 0, 실패 시 -1 반환
공유 메모리 객체와 실제 프로세스에서 사용하는 메모리 영역을 맵핑
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
addr : 맵핑 영역의 시작 주소(NULL 포인터 사용시 운영체제가 선택)
length : 맵핑 영역의 길이
prot : 메모리 맵핑 영역의 보호 수준 지정을 위한 매개변수
flags : 맵핑된 데이터의 처리방식에 대한 정보
fd : 맵핑할 객체를 지시하는 디스크립터
offset : 맵핑할 객체 중 실제 맵핑을 원하는 시작지점(일반적으로 0 사용)
공유 메모리 영역의 맵핑 제거
int munmap(void *addr, size_t len);
addr : 맵핑을 제거할 시작 주소
len : 제거할 사이즈