linux系统写大文件读写处理
2017-03-17 11:34
127 查看
在cenos系统下读取时常变更的大文件(26M),本人通过定时器去查看文件是否被修改,修改则重新load.但是测试发现每次load的都是当前文件的上次保存的记录。刚开始是以为文件操作出现问题,
查了资料发现原因是由于硬盘与主存储器的数据可能没有同步化。
引用以下帮助理解:
『当系统读取了某一个档案, 则该档案所在的区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中, 若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变, 而且在缓冲区当中的区块数据会被标记为『 Dirty 』,这个时候磁盘实体区块尚未被修正! 所以亦即表示,这些『 Dirty 』区块的数据必需回写到磁盘当中, 以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。』
最终解决办法是通过mmap映射磁盘内存的方式,这样大文件更改了,程序通过映射到磁盘读取数据就可以是最新修改的数据了。当然每次映射都要unmap解除映射。如果需要写到磁盘文件可以使用msync你所映射的内存块。简单高效,对于超大文件建议,分块映射的方式。
查了资料发现原因是由于硬盘与主存储器的数据可能没有同步化。
引用以下帮助理解:
『当系统读取了某一个档案, 则该档案所在的区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中, 若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变, 而且在缓冲区当中的区块数据会被标记为『 Dirty 』,这个时候磁盘实体区块尚未被修正! 所以亦即表示,这些『 Dirty 』区块的数据必需回写到磁盘当中, 以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。』
最终解决办法是通过mmap映射磁盘内存的方式,这样大文件更改了,程序通过映射到磁盘读取数据就可以是最新修改的数据了。当然每次映射都要unmap解除映射。如果需要写到磁盘文件可以使用msync你所映射的内存块。简单高效,对于超大文件建议,分块映射的方式。
相关文章推荐
- Linux系统下如何查看及修改文件读写权限
- Linux系统如何查看及修改文件读写权限(ZZ)
- Linux文件系统之文件的读写
- Linux系统下如何查看及修改文件读写权限
- Linux系统如何查看及修改文件读写权限
- Linux系统下如何查看及修改文件读写权限
- Linux下各种主要文件系统的读写性能测试 ------------实际系统中的Nand Flash速度测试结果
- Linux下各种主要文件系统的读写性能测试
- Linux系统下如何查看及修改文件读写权限
- Linux系统下如何查看及修改文件读写权限
- Linux系统下如何查看及修改文件读写权限
- Linux系统下如何查看及修改文件读写权限
- Linux/Unix C编程之系统函数文件读写 学习笔记
- Linux系统下如何查看及修改文件读写权限
- 如何处理在linux下装TDS的时候,系统提示找不到文件之类的错误
- Linux内核读写文件以及从SD卡读文件并处理的方法
- Linux系统下如何查看及修改文件读写权限
- Linux 文件系统 之 文件描述符与读写指针
- Linux系统下如何查看及修改文件读写权限的举例子
- linux0.11文件系统文件读写1