1.多个进程mmap同一个文件会不会开辟多个内存?
2.munmap的时候,其他进程会不会受影响?
网上没有搜到自己想要的答案,只好自己做个实验
第一个问题代码没保存,思路是:两个进程同时mmap一个文件,同时往里面修改数据。
结果是:多个进程mmap同一个文件不会开辟多个内存。是共享同一片物理内存
int main(int argc, char **argv)
{
int fd;
char *mapped_mem;
int flength = 1024;
char buf[100] = "进程1:";
fd = open("/home/dong/temp2", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
mapped_mem = (char*) mmap(0, flength, PROT_READ, MAP_SHARED, fd, 0);
printf("地址:%x\n",(void *)mapped_mem);
//memset(mapped_mem,0,1024);//注意对于刚创建的文件还没有任何东西,这时候去读它会出现段错误
for(int i=0; i<10; i++)
{
printf("%s\n", mapped_mem);
sleep(1);
}
munmap(mapped_mem, flength);
close(fd);
return 0;
}
int main()
{
int flength = 1024;
int fd = open("/home/dong/temp2", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
//S_IRUSR Permits the file's owner to read it.
//S_IWUSR Permits the file's owner to write to it.
printf("fd = %d\n",fd);
char buf[100] = "进程2:";
char *mapped_mem = (char*) mmap(0, flength, PROT_READ, MAP_SHARED, fd, 0);
printf("地址:%x\n",(void *)mapped_mem);
for(int i=0; i<5; i++)
{
printf("%s\n", mapped_mem);
sleep(1);
}
munmap(mapped_mem,flength);
close(fd);
return 0;
}