linux系统写大文件读写处理
来源:互联网 发布:什么字体软件最好 编辑:程序博客网 时间:2024/06/03 16:41
在cenos系统下读取时常变更的大文件(26M),本人通过定时器去查看文件是否被修改,修改则重新load.但是测试发现每次load的都是当前文件的上次保存的记录。刚开始是以为文件操作出现问题,
查了资料发现原因是由于硬盘与主存储器的数据可能没有同步化。
引用以下帮助理解:
『当系统读取了某一个档案, 则该档案所在的区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中, 若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变, 而且在缓冲区当中的区块数据会被标记为『 Dirty 』,这个时候磁盘实体区块尚未被修正! 所以亦即表示,这些『 Dirty 』区块的数据必需回写到磁盘当中, 以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。』
最终解决办法是通过mmap映射磁盘内存的方式,这样大文件更改了,程序通过映射到磁盘读取数据就可以是最新修改的数据了。当然每次映射都要unmap解除映射。如果需要写到磁盘文件可以使用msync你所映射的内存块。简单高效,对于超大文件建议,分块映射的方式。
查了资料发现原因是由于硬盘与主存储器的数据可能没有同步化。
引用以下帮助理解:
『当系统读取了某一个档案, 则该档案所在的区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中, 若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变, 而且在缓冲区当中的区块数据会被标记为『 Dirty 』,这个时候磁盘实体区块尚未被修正! 所以亦即表示,这些『 Dirty 』区块的数据必需回写到磁盘当中, 以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。』
最终解决办法是通过mmap映射磁盘内存的方式,这样大文件更改了,程序通过映射到磁盘读取数据就可以是最新修改的数据了。当然每次映射都要unmap解除映射。如果需要写到磁盘文件可以使用msync你所映射的内存块。简单高效,对于超大文件建议,分块映射的方式。
0 0
- linux系统写大文件读写处理
- linux读写大文件
- linux读写大文件
- linux读写大文件
- Linux系统文件读写
- linux读写二进制大文件
- 使用JDBC处理大数据 读写文件
- linux下大文件读写源码示例
- 关于内存映射文件技术处理大文件的读写
- 关于内存映射文件技术处理大文件的读写
- 关于内存映射文件技术处理大文件的读写
- 关于内存映射文件技术处理大文件的读写
- 关于内存映射文件技术处理大文件的读写
- 关于内存映射文件技术处理大文件的读写
- 关于内存映射文件技术处理大文件的读写
- 关于内存映射文件技术处理大文件的读写
- linux系统文件处理命令
- 读写写ini文件
- 教您一招5秒破解Excel密码
- Hibernate之旅二:Hibernate简介
- java枚举类型enum的使用
- Swift——throws异常处理
- Xcode编译报错:Interface Builder could not open the document
- linux系统写大文件读写处理
- 【学习】Hadoop大数据平台架构与实践--基础篇上
- codeforces 785E. Anton and Permutation
- 图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践
- java中的抽象类和抽象方法
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- MFC中与CLIPS交互的方法(一)
- mysql 临时表、内存表和视图
- MSP430 的 PxSEL1, PxSEL0 说明