文件 – 为什么使用mmap而不是fread?
为什么/何时使用
mmap() 更好,而不是从块中的文件流到字节数组的
fread() ?
uint8_t my_buffer[MY_BUFFER_SIZE]; size_t bytes_read; bytes_read = fread(my_buffer,1,sizeof(my_buffer),input_file); if (MY_BUFFER_SIZE != bytes_read) { fprintf(stderr,"File read failed: %sn",filepath); exit(1); } 解决方法
映射文件而不是将其作为流读取是有好处的:
>如果您打算对文件的不同宽度区域执行随机访问,则映射可能意味着只需要实际读取您访问的页面,同时保持代码简单. 映射文件有一些缺点: >如果您只需要对文件进行顺序访问,或者它很小,或者您只需要访问它的一小部分,那么设置内存映射然后引发页面错误以实际导致内容被读取的开销可能会更少比阅读文件更有效率.>如果读取文件时出现I / O错误,您的应用程序很可能会在现场被杀死,而不是接收系统调用错误,您的应用程序可以正常响应. (从技术上讲,你可以在前一种情况下捕获SIGBUS,但从这种事情中恢复正常并不容易.)>如果您不使用64位体系结构且文件非常大,则可能没有足够的地址空间来映射它.> mmap()比read()(你建议的fread()更不便携).> mmap()仅适用于常规文件(在某些文件系统上)和某些块设备. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |