linux系统写大文件读写处理

在cenos系统下读取时常变更的大文件(26M),本人通过定时器去查看文件是否被修改,修改则重新load.但是测试发现每次load的都是当前文件的上次保存的记录。刚开始是以为文件操作出现问题,

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值