🚩memory mapping
- memory mapping : file을 프로세스의 memory에 mapping. 즉, 프로세스에 전달할 데이터를 저장한 파일을 직접 프로세스의 가상 주소 공간으로 매핑한다. 따라서, read, write 함수를 사용하지 않고도 프로그램 내부에서 정의한 변수를 사용해 파일에서 데이터를 읽거나 쓸 수 있다.
- 사용 방법
#include <sys/mman.h>
void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
- addr : 매핑할 메모리 주소
- len : 메모리 공간의 크기
- prot : 보호 모드 ( PROT_READ : 읽기 허용, PROT_WRITE : 쓰기 허용 )
- flags : 매핑된 데이터의 처리 방법을 지정하는 상수 ( MAP_SHARED : 변경 내용 공유, MAP_PRIVATE : 변경 내용 공유하지 않음 )
- fildes : file descriptor
- off : file offset (페이지 크기의 배수)
- 페이지 단위 메모리 매핑 실행
- 매핑된 영역을 벗어나면, SIGBUS, SIGSEGV 발생
🚩memory mapping 예제
int main(void){
int fd;
char *addr;
fd=open("data", O_RDWR);
addr = mmap(NULL, 512, PROT_READ|PROT_WRTIE, MAP_SHARED, fd, 0);
printf("%s\n", addr);
}
🚩memory mapping 해제
#include <sys/mman.h>
int munmap(void *addr, size_t len);
- addr : mmap의 반환 값
🚩 보호모드 변경
#include <sys/mman.h>
int mprotect(void *addr, size_t len, int prot);
🚩 파일 크기 변경
#include <unistd.h>
int truncate(const char *path, off_t len);
#include <unistd.h>
int ftruncate(int fildes, off_t len);
🚩 매핑된 메모리 동기화
#include <sys/mman.h>
int msync(void *addr, size_t len, int flags);
- flags 인자 : MS_ASYNC (비동기적 쓰기 작업), MS_SYNC (동기적 쓰기 작업)
'UNIX 프로그래밍' 카테고리의 다른 글
[9주차 개념] 파이프 (0) | 2023.11.14 |
---|---|
[7주차 개념] 시그널 (0) | 2023.11.10 |
[4주차 실습] UNIX 실습 문제 (0) | 2023.10.22 |
[3주차 실습] UNIX 실습 문제 (0) | 2023.10.22 |
[2주차 실습] UNIX 실습 문제 (1) | 2023.10.22 |
댓글