/*************************************************************************
> 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.