使用MMAP与FSTREAM或FOPEN访问二进制文件
Accessing binary files with mmap vs fstream or fopen
我不知道可以使用mmap()
读取二进制文件。我曾经认为mmap()
只能用于Linux中的IPC(Intercess Communication(来交换无关过程之间的数据。
有人可以解释如何使用mmap()
读取文件?我听说当二进制文件被随机访问时,它具有巨大的优势。
好吧, mmap
ping文件的完成方式与IPC或映射匿名内存相同。在映射匿名内存的情况下
在映射文件的情况下,从文件/或缓冲区缓存中读取与文件内容相对应的页面。在文件大小之外读取或写作将导致sigbus。从本质上讲,mmap
返回的指针可以与malloc
返回的指针相似,只是从映射到映射的末尾字节的大小/可能会自动从/读取,并可能写入透明的备份文件。
示例:
fd = open("input.txt", O_RDWR, 0666);
fstat(fd, &stat_result);
char* contents = mmap(0, stat_result->st_size,
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
(错误检查省略(
执行后,您可以将contents
视为指向stat_result->st_size
字符字符数组的第一个字节,并且您可以像普通数组一样使用它,并且操作系统将透明地将更改写回文件中。<<<<<<<<<<<<<<<<<<<<<<<</p>
使用mmap
,操作系统将对文件的哪些部分保存在内存/缓冲区缓存中,哪些不应该。
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- 使用MMAP与FSTREAM或FOPEN访问二进制文件
- 在 EXE 中嵌入一个文本文件,可以使用 fopen 访问该文件
- fopen-mlock访问违规