您的位置:首页 > 其它

探究mmap

2016-04-22 22:11 351 查看
关于内存映射mmap的原理介绍非常多,之所以想了解mmap的原因是看到进程间通信,使用mmap内存映射实现消息队列。

1、相关链接

http://blog.csdn.net/joejames/article/details/37958017

里面提到了内核空间和用户空间的概念,好久不看内核先关的书籍,有点遗忘。

里面提到read/write会出现两次拷贝,第一次拷贝是将文件拷贝到内核空间,第二次拷贝是将内核空间拷贝到用户空间。而内存映射只有一次拷贝,直接到用户空间。

2、使用匿名内存映射实现父子进程间通信

pid_t fpid;

char p_map = (char)mmap(NULL,100, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);

fpid = fork();//关键一点,注意调用顺序,先调用mmap

if(fpid == 0) {

sleep(2);

printf(“child %s\n”, p_map);

sprintf(p_map, “%s”, “this is from child”);

}else {

sprintf(p_map, “%s\n”, “I from parent”);

sleep(3);

printf(“”“parent got a message %s\n”, p_map);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: