c++ 怎么使用mmap实现内存共享
时间: 2024-10-26 08:16:50 浏览: 29
C++可以使用mmap()系统调用实现内存共享。具体步骤如下:
1. 打开一个文件,使用open()函数,得到文件描述符fd。
2. 使用mmap()函数将文件映射到内存中,得到一个指向映射区的指针p。
3. 关闭文件,使用close()函数关闭文件。
4. 使用指针p访问共享内存。
5. 使用munmap()函数释放共享内存。
下面是一个简单的例子:
```
#include <iostream>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
using namespace std;
int main()
{
int fd = open("temp", O_RDWR|O_CREAT|O_TRUNC, 0644);
if(fd < 0){
perror("open error");
exit(1);
}
ftruncate(fd, 4);
int *p = (int*)mmap(NULL, 4, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if(p == MAP_FAILED){
perror("mmap error");
exit(1);
}
close(fd);
pid_t pid = fork();
if(pid == 0){
*p = 2000;
cout << "child, *p = " << *p << endl;
} else{
sleep(1);
cout << "parent, *p = " << *p << endl;
wait(NULL);
int ret = munmap(p, 4);
if(ret == -1){
perror("munmap error");
exit(1);
}
}
return 0;
}
```
该程序创建了一个文件temp,并将其映射到内存中。然后创建了一个子进程,子进程修改共享内存中的值,父进程读取共享内存中的值。最后释放共享内存。
阅读全文