IPC, 공유메모리 생성 함수 shmget()

IT/C 언어

함수 원형 int shmget(ket_t key, size_t size, int shmflg);


■헤더파일

#include <sys/ipc.h>

#include <sys/shm.h>


shmget함수는 인자의 키값을 갖는 공유메모리의 식별자를 리턴한다. 

새로 생성된 공유메모리는 입력된 사이즈와 같은 크기의 공유메로리를 생성하게 된다. 


shmget()함수 인자

shmget함수는는 3개의 변수를 인자로 가진다. 

  1. ket_t key는 생성하고자 하는 공유메모리의 key값으로 key_t형이며 정수로 입력할 수 있다. 그리고 IPC_PRIVATE로 인자로 가질 경우 프로세스의 개인적인 공유메모리를 생성한다.
  2. size_t size는 생성하고자 하는 공유메모리의 크기이다.
  3. int shmflg는 공유메모리의 flg값으로 이 공유메모리의 권한과 생성시 옵션을 줄 수가 있다.IPC_CREAT와 숫자 권한을 or연산으로 입력 받는 경우가 대다수이며, IPC_CREAT옵션을 줄 경우 없다면 입력된 키값의 공유메모리가 있다면 새로성성하지않고 참조하며, 없다면 입력된 권한으로 새로 생성한다. 그와 반대로 IPC_EXCL 인자로 줄경우 이미 생성된 공유메모리가 있다면 함수를 실패하고 error를 반환한다.


■ 리턴값

함수가 성공시 공유메모리의 식별자를 반환하며, 실패시 -1을 리턴하고 errno를 셋팅한다.


■사용예제

공유메모리를 만드는 간단한 예제를 살펴보도록 하겠다.


임의적으로 key값을 주고 256의 크기를 갖는 공유메모리를 생성하는 코드를 작성했다.

만약 성공시 공유메모리 id 값을 찍을 것이고, 실패시 실패 매세지를 출력할 것이다.


컴파일하고 프로그램을 실행시켰다.


결과는,

shmid : 61538306을 갖는 공유메모리가 생성 되었다.

공유메모리가 생성 되었는지는 터미널에서 ipcs 혹은 ipcs -m을 입력시 볼 수 있다.


위 사진을 보면 shmid 61538306이고 256bytes를 갖는 공유메모리가 생성 되었음을 볼 수 있다.


좀 더 자세한 사항은

$man shmget 시에 살펴 볼 수 있다.