c++使用mmap
在C++中使用mmap函数可以将一个文件映射到内存中,从而可以通过内存访问文件的内容,而无需使用常规的文件读写操作。
以下是一个使用mmap函数将文件内容映射到内存的示例:
#include <iostream>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
const char* file_path = "/path/to/file.txt";
// 打开文件
int fd = open(file_path, O_RDONLY);
if (fd == -1) {
std::cerr << "Failed to open file" << std::endl;
return 1;
}
// 获取文件大小
struct stat file_stat;
if (fstat(fd, &file_stat) == -1) {
std::cerr << "Failed to get file size" << std::endl;
close(fd);
return 1;
}
size_t file_size = file_stat.st_size;
// 将文件映射到内存
char* file_data = static_cast<char*>(mmap(nullptr, file_size, PROT_READ, MAP_PRIVATE, fd, 0));
if (file_data == MAP_FAILED) {
std::cerr << "Failed to mmap file" << std::endl;
close(fd);
return 1;
}
// 通过内存访问文件内容
std::cout << "File content: " << std::endl;
std::cout << file_data << std::endl;
// 解除映射并关闭文件
if (munmap(file_data, file_size) == -1) {
std::cerr << "Failed to unmap file" << std::endl;
close(fd);
return 1;
}
close(fd);
return 0;
}
在上述示例中,首先使用open函数打开文件,并获取文件的大小。然后使用mmap函数将文件映射到内存中,返回的指针file_data指向映射后的内存区域。
接下来可以通过指针file_data访问文件的内容,这里直接将内容输出到控制台。最后使用munmap函数解除映射,并关闭文件。
需要注意的是,使用完mmap映射后的内存后,务必使用munmap函数解除映射,避免内存泄漏。同时,mmap函数返回的指针类型为void*,在使用时需要根据具体情况进行类型转换。
原文地址: http://www.cveoy.top/t/topic/i7rU 著作权归作者所有。请勿转载和采集!