linux系统写大文件读写处理

来源:互联网 发布:什么字体软件最好 编辑:程序博客网 时间:2024/06/03 16:41
在cenos系统下读取时常变更的大文件(26M),本人通过定时器去查看文件是否被修改,修改则重新load.但是测试发现每次load的都是当前文件的上次保存的记录。刚开始是以为文件操作出现问题,

查了资料发现原因是由于硬盘与主存储器的数据可能没有同步化。

引用以下帮助理解:
『当系统读取了某一个档案, 则该档案所在的区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中, 若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变, 而且在缓冲区当中的区块数据会被标记为『 Dirty 』,这个时候磁盘实体区块尚未被修正! 所以亦即表示,这些『 Dirty 』区块的数据必需回写到磁盘当中, 以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。』

最终解决办法是通过mmap映射磁盘内存的方式,这样大文件更改了,程序通过映射到磁盘读取数据就可以是最新修改的数据了。当然每次映射都要unmap解除映射。如果需要写到磁盘文件可以使用msync你所映射的内存块。简单高效,对于超大文件建议,分块映射的方式。


0 0
原创粉丝点击