본문 바로가기

Learning/└◆Reversing

[참고]공유 메모리 관련 함수

공유 메모리 관련 함수

 

 

shmget() 함수

shmat() 함수

shmdt() 함수

 

 

■ shmget() 함수

 

NAME

     shmget - allocates a shared memory segment

     메모리 안에 들어있는 일부내용 조각들을 세그먼트라고 부른다. 그것을 할당한다.

 

SYNOPSIS

  #include <sys/ipc.h>

  #include <sys/shm.h>

 

     int shmget(key_t key, int size, int shmflg);

 

DESCRIPTION

shmget() returns the identifier of the shared memory segment associated

to the value of the argument key. A new shared memory segment, with

size equal to the round up of size to a multiple of PAGE_SIZE, is cre-

ated if key has value IPC_PRIVATE or key isn't IPC_PRIVATE, no shared

memory segment is associated to key, and IPC_CREAT is asserted in shm-

flg (i.e. shmflg&IPC_CREAT isn't zero).

 

The value shmflg is composed of:

 

IPC_CREAT   to create a new segment. If this flag is not used, then

shmget() will find the segment associated with key, check

to see if the user has permission to receive the shmid

associated with the segment, and ensure the segment is not

marked for destruction.

 

IPC_EXCL    used with IPC_CREAT to ensure failure if the segment

exists.

 


shmget() 함수

-공유 메모리를 생성하거나 공유 메모리를 사용할 수 있는 함수

  -> 공유 메모리를 생성하거나 생성된 공유 메모리의 ID 반환

-형식 int shmget(key_t key, int size, int shmflg);

   - key_t key : 공유 메모리를 읽기 위한 key 변수

   - int size : 공유 메모리의 크기

   - int shmflg : 공유 메모리 생성이나 사용 옵션을 지정 

              - IPC_CREAT : 공유 메모리 생성 

              - 0666 : 공유 메모리 사용 권한

 

 

■ shmat() 함수/shmdt() 함수

 

NAME

      shmop - shared memory operations

   

SYNOPSIS

  #include <sys/types.h>

  #include <sys/shm.h>

 

      void *shmat(int shmid, const void *shmaddr, int shmflg);

                              할당하면 변환되는 값, 위치, 플라그

      int shmdt(const void *shmaddr);

 

DESCRIPTION

The function shmat attaches the shared memory segment identified by

shmid to the address space of the calling process. The attaching

address is specified by shmaddr with one of the following criteria:

 

If shmaddr is NULL, the system chooses a suitable (unused) address at

which to attach the segment.

 

If shmaddr isn't NULL and SHM_RND is asserted in shmflg, the attach

occurs at the address equal to shmaddr rounded down to the nearest mul-

tiple of SHMLBA. Otherwise shmaddr must be a page aligned address at

which the attach occurs.

 

If SHM_RDONLY is asserted in shmflg, the segment is attached for read-

ing and the process must have read permission for the segment. Other-

wise the segment is attached for read and write and the process must

have read and write permission for the segment. There is no notion of

a write-only shared memory segment.

 

 

shmat() 함수

-이미 할당된 공유 메모리 공간을 다른 프로세스에서 사용할 수 있게 권한을 부여하는 함수

  -> 생성된 공유 메모리를 프로세스에 연결(Attach)

-형식 : void *shmat(int shmid, const void *shmaddr, int shmflg);

  - int shmid : 공유 메모리를 생성할 때 만들어진 공유 메모리 ID

  - const void *shmaddr : 공유 메모리가 할당된 주소

  - int shmflg : 공유 메모리 사용 옵션을 지정 

                       - SHM_RND : 공유 메모리 주소를 프로세스에 맞게 따로 할당 

                       - SHM_RDONLY : 공유 메모리를 읽기 전용으로 설정

 

shmdt() 함수

-다른 프로세스에 연결된 공유 메모리 공간의 사용을 끝낸 후 프로세스와 공유 메모리 공간의 연결을 끊는다.

  -> 프로세스에 연결된 공유 메모리를 분리(Detach)

-형식 int shmdt(const void *shmaddr);

   - const void *shmaddr : 공유 메모리가 할당된 주소