FTZ level10 본문
공유 메모리에 대한 개념이 필요하다.
원래 보통 프로세스에서 메모리는 해당 프로세스만 사용함
이게 무슨 말이냐면 메모리에 여러 변수들 사용할 수 있는 건 다른 프로세스가 아닌
자기 프로세스만 접근 할 수 있음
근데 아주 예외로 다른 프로세스가 접근할 수 있게 만드는 것이 공유 메모리라고 함
이게 IPC기법임
hint에서 key_t값을 주었는데 저게 공유 메모리를 할당할 수 있는 고유 key값임
일단 IPC코드를 짜려면 함수에 대해서 알아야 함
IPC사용하려면
#include <sys/shm.h>
#include <sys/ipc.h>
그리고 연결하기 위한 최소한의 두 개 함수를 알아야 함
int shmget(key_t key, size_t size, int shmflg);
1) shmget : 인자로 전달된 key의 값으로 공유 메모리를 얻고 공유메모리 조각의 id를 돌려준다.
key : 공유메모리를 할당할 때 사용하는 고유 key값
size : 메모리의 최소 size를 의미, 이미 존재하는 메모리면 0
shmflg : IPC_CREAT , IPC_EXCL
IPC_CREAT : 새로운 메모리 세크 먼트를 만듦,, 이 flag를 사용하지 않으면 shmget에 명시된 key에 연관된 것을 찾고 접근할 수 있는 권한이 있는지 확인
IPC_EXCL : IPC_CREAT와 함께 쓰는 플래그임, 메모리 세그먼트가 존재하면 shmget은 실패함
void *shmat(int shmid, const void *shmaddr, int shmflg);
2) shmat : 공유 메모리 얻었으면 메모리 위치에 이 프로세스를 묶는 시스템 콜
shmid : 공유메모리 id
shmaddr : null이면 커널에서 적절한 주소 반환함
null이 아니면 shmflag로 SHM_RND일 때, 그 주소와 가장 가까운 주소 반환
ipc 데이터 확인
함수 구조와 ipc 데이터 기반으로 코드를 작성했다.
perms을666으로 했다가 안돼서 삽질했던 기억이 있는데 4자리를 맞추어 주도록 하자.
password : what!@#$?
'wargame > FTZ-LEVEL' 카테고리의 다른 글
FTZ level12 (0) | 2021.10.07 |
---|---|
FTZ level11 (0) | 2021.10.07 |
FTZ level9 (0) | 2021.10.07 |
FTZ level8 (0) | 2021.10.07 |
FTZ level7 (0) | 2021.10.07 |