linux C mmap code

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