mmap测试 | 深入理解计算机系统
在复习这本书,顺便写几个测试代码。
用mmap读个文件,在这种情况下使用MAP_SHARED和MAP_PRIVATE都是可以的,但是如果要修改文件内容并写会,则需要MAP_SHARED。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <sys/mman.h>
unsigned long get_file_size(const char *filename)
{
struct stat buf;
if(stat(filename, &buf)<0)
{
return 0;
}
return (unsigned long)buf.st_size;
}
int main(int argc, char* argv[]){
if (argc < 2){
exit(-1);
}
printf("> open: %s \n> length: %d \n", argv[1], get_file_size(argv[1]));
int fp = open(argv[1], O_RDWR);
char* addr = mmap(NULL, get_file_size(argv[1]), PROT_READ|PROT_WRITE, MAP_SHARED, fp, 0);
printf("> start addr: %p \n", addr);
printf(" > %s\n", addr);
addr[0] = 'M';
addr[1] = 'z';
munmap(addr, get_file_size(argv[1]));
close(fp);
return 0;
}
有几个讲的比较详细的文章:
mmap: https://blog.csdn.net/yangle4695/article/details/52139585
mmap写回: https://www.cnblogs.com/tsecer/p/10485914.html