***공유메모리생성_ shmget()***
공유메모리는 단어 뜻에서 알 수 있듯이 하나의 프로세스에서가 아니라 여러 프로세스가 함께 사용하는 메모리를 말한다. 이 공유 메모리를 이용하면 프로세스끼리 통신을 할 수 있으며, 같은 데이터를 공유할 수 있다. 이렇게 같은 메모리 영역을 공유하기 위해서는 공유메모리를 생성한 후 프로세스의 자신의 영역에 첨부를 한 후에 마치 자신의 메모리를 사용하듯 사용한다.
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg);
key_t key : 공유 메모리를 구별하는 식별 번호
int size : 공유 메모리 크기
int shmflg : 동작 옵션
IPC_CREATE : key에 해당하는 공유 메모리가 없다면 새로 생성한다. 만약있다면 무시하며
생성을 위해 접근 권한을 지정해 주어야 한다.
IPC_EXCL : 공유 메모리가 이미 있다면 실패로 반환하며 공유 메모리에 접근하지 못한다.
이 옵션이 없어야 기존 공유 메모리에 접근할 수 있다.
반환 -1 : 실패
-1 이외 : 공유 메모리 생성 성공, 공유 메모리 식별자
***공유 메모리를 프로세스에 첨부_shmat()***
#include <sys/type.h>
#include <sys/shm.h>
void *shmat(int shmid, const void* shmaddr, int shmflg);
int shmid : 공유 메모리를 구별하는 식별번호
void *shmaddr : 첨부되는 어드레스 주소, 일반적으로 NULL을 지정
int shmflg : 동작옵션
SHM_RDONLY : 공유 메모리를 읽기 전용으로
SHM_RND : shmaddr이 NULL이 아닌 경우일 때만 사용되며, shmaddr을 반올림하여
메모리 페이지 경계에 맞춘다.
반환 (void *)-1 : 실패
이외 : 프로세스에 첨부된 프로세스에서의 공유 메모리 주소
***공유 메모리를 분리_shmdt()***
#include <sys/type.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr);
void *shmaddr : 분리할 공유 메모리 주소
반환 -1 : 실패
0 : 공유 메모리 분리 성공
[출처] shmget(), shmat(), shmdt()|작성자 폭풍우
'FTZ 따라하기' 카테고리의 다른 글
FTZl Level9 C언어 (0) | 2018.12.05 |
---|