/*************************************************************************
> File Name: test_mmap.c
> Author: LBK
> compile: gcc -g test_mmap.c -o test_mmap
> run example: ./test_mmap ./filr_name
> Created Time: Mon 29 Jul 2019 06:23:12 PM PDT
************************************************************************/
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <assert.h>
#include <stdio.h>
//獲得文件大小
size_t getFilesize(const char* filename) {
struct stat st;
stat(filename, &st);
return st.st_size;
}
int main(int argc, char** argv) {
//設置映射塊大小
size_t block = 1*1024*1024;
printf("%zu\n",block);
size_t filesize = getFilesize(argv[1]);
printf("%zu\n",filesize);
// 獲得映射塊數目
int num = filesize / block;
num++;
//打開文件
int fd = open(argv[1], O_RDONLY, 0);
assert(fd != -1);
off_t offset = 0;
int i;
for(i = 0; i < num; i++){
//執行mmap
void* mmappedData = mmap(NULL, block, PROT_READ, MAP_PRIVATE | MAP_POPULATE, fd, offset);
assert(mmappedData != MAP_FAILED);
//輸出 stdout (= FD #1)
write(1, mmappedData, block);
//清除映射區
int rc = munmap(mmappedData, block);
assert(rc == 0);
// 更新計算偏移
offset +=block;
}
close(fd);
return 0;
}
linux C mmap code
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.