linux mmap
时间: 2023-10-12 20:06:39 浏览: 62
Linux的mmap是一种内存映射文件的方法,通过将一个文件或者其他对象映射到进程的地址空间,实现磁盘的地址和进程虚拟地址空间的一一对应关系。通过使用mmap系统调用,进程可以将同一个普通文件映射到它们的地址空间中,从而实现共享内存的效果。一旦文件被映射到进程的地址空间中,进程可以像访问普通内存一样对文件进行读写操作。
在Linux中,通过调用内核的mmap函数来进行内存映射,其函数原型为int mmap(struct file *filp, struct vm_area_struct *vma)。需要注意的是,这里的mmap是内核态的mmap,并非用户态的mmap。
下面是一个演示映射到物理内存的案例:
```cpp
#include <iostream>
#include <sys/mman.h>
#include <cstring>
#include <cerrno>
#include <cstdio>
using namespace std;
static const int SIZE = 4096;
int main() {
char *str = (char *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
// 注意MAP_PRIVATE和MAP_ANONYMOUS
// 建立映射
if (str == MAP_FAILED) {
printf("%s\n", strerror(errno));
return -2;
}
strcpy(str, "hello ksy");
puts(str);
// 用于取消映射
munmap(str, SIZE);
return 0;
}
```
以上代码使用mmap将一段物理内存映射到进程的地址空间中,然后将字符串"hello ksy"写入到这段映射的内存中,并
#### 引用[.reference_title]
- *1* *2* *3* [Linux下mmap](https://blog.csdn.net/qq_56999918/article/details/127070280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]