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 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    //获得文件大小
    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,编程,数据结构,算法)