gpt4 book ai didi

c++ - 使用 mmap 与 fstream 或 fopen 访问二进制文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:28 24 4
gpt4 key购买 nike

我不知道可以用 mmap() 读取二进制文件。我曾经认为mmap()只能用于Linux中的IPC(进程间通信),以便在不相关的进程之间交换数据。

谁能解释一下如何使用 mmap() 读取文件?我听说它在随机访问二进制文件时有很大的优势。

最佳答案

好吧,mmapping 文件的方式与处理 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个字符组成的字符数组的第一个字节,可以像普通的一样使用数组,操作系统会将更改透明地写回到文件中。


有了 mmap,操作系统可以更好地了解文件的哪些部分应该保存在内存/缓冲区缓存中,哪些不应该保存。

关于c++ - 使用 mmap 与 fstream 或 fopen 访问二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55990723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com