#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
매핑되어 반환될 주소값을 직접 지정하여 요청
요청이 가능하면, 지정한 주소값으로 반환하고 불가능하면 커널이 임의의 주소값으로 반환함.
단, flags에 MAP_FIXED가 Set되어 있으면 요청 불가능할 경우에 실패값을 반환
매핑할 Byte수
제어 권한
매핑 설정
파일 디스크립터
오프셋값
매핑된 주소값
MAP_FAILED
#include <sys/mman.h>
int munmap(void *addr, size_t length);
해제할 매핑주소값
매핑을 해제할 Byte수
0
-1
struct info_t {
char name[64];
int age;
};
static void display_info(void)
{
int fd = -1, totalCount;
struct info_t *pInfo;
struct stat statBuf;
fd = open("file", O_RDONLY);
if(fd < 0){
perror("open() FAIL\n");
goto EXCEPTION;
}
if(fstat(fd, &statBuf) < 0){
perror("fstat() FAIL\n");
goto EXCEPTION;
}
pInfo = (struct info_t *)
(mmap(NULL, statBuf.st_size, PROT_READ, MAP_SHARED, fd, 0));
if(pInfo == MAP_FAILED){
perror("mmap() FAIL\n");
goto EXCEPTION;
}
totalCount = statBuf.st_size / sizeof(struct info_t);
for(register int idx = 0; idx < totalCount; idx++){
printf("[%d] Name(%s), Age(%d)\n", idx, pInfo[idx].name, pInfo[idx].age);
}
if(munmap(fd, statBuf.st_size) < 0){
perror("munmap FAIL\n");
}
close(fd);
return;
EXCEPTION:
if(fd >= 3) close(fd);
return;
}