使用MMAP与FSTREAM或FOPEN访问二进制文件

Accessing binary files with mmap vs fstream or fopen

本文关键字:FOPEN 访问 二进制文件 FSTREAM MMAP 使用      更新时间:2023-10-16

我不知道可以使用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,操作系统将对文件的哪些部分保存在内存/缓冲区缓存中,哪些不应该。