文件读写操作的缓存机制


       在使用fwrite, fread时,并不是每调用一次就对文件进行读写操作。标准I/O为write,read之类的调用提供了缓存。它对每个I/O流自动的进行缓存管理,避免应用程序需要考虑这点所带来的麻烦。这样做的目的是避免频繁I/O操作浪费大量时间。然而,我们在实际编程中往往欠考虑I/O 缓存机制,从而带来许多意想不到的麻烦。

       缓存有三种类型,分别是全缓存,行缓存,不带缓存(见一本伟大的书《Unix 环境高级编程》)。一般我们操作磁盘上文件的时候,用全缓存的类型。即调用读写函数填满缓存后,才真正对文件进行一次读写操作。      

       我们可以通过setbuf或者setvbuf来改变缓存类型,。在libc中,默认的缓存大小为8k字节,见stdio.h (#define _G_BUFSIZ 8192) 。我们可以根据我们需要来改变这个缓存大小。

      

       任何时候,我们都可根据需要通过调用fflush()强制刷新一个流,这样可使得缓存没填满的情况下,对文件进行实际的操作。通常这种情况出现在数据流的末尾。如果你经常出现数据在文件末尾丢失的情况,那么就要考虑是否要用fflush来将缓存的内容写入文件。

       当然,fclose()的作用fflush。即调用fclose后,缓存无论有没有填满,都要将缓存内容写入文件。所以,fclose()作用还是很明显的,千万不要偷懒,在每次操作后都要关文件流。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/flylonginsky/archive/2008/05/07/2409902.aspx

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 缓存机制是指Linux操作系统对文件系统和磁盘I/O进行缓存的一种机制。它通过将磁盘上的数据缓存在内存中,加快访问速度,提高系统性能。 Linux缓存机制主要有以下几个方面: 1. 页面缓存(Page Cache):Linux使用页面缓存来加速对文件的读取和写入。当应用程序读取文件时,文件的内容会被缓存在页面缓存中,下次再读取相同的文件时,可以直接从缓存中获取数据,避免了频繁的磁盘访问。对于写入操作,页面缓存会将数据暂时保存在内存中,延迟写入磁盘,提高写入效率。 2. 直接IO(Direct IO):直接IO是一种绕过页面缓存直接进行磁盘读写的方式。当应用程序使用直接IO进行数据读写时,数据不会被缓存在页面缓存中,而是直接读写磁盘。直接IO适用于对大文件进行随机访问或者需要避免页面缓存带来的性能开销的场景。 3. 写回(Write-back)和写入(Write-through):Linux的页面缓存采用写回和写入两种方式来处理数据的写入。写回方式表示数据先被写入页面缓存,然后再由操作系统决定何时将数据写入磁盘;写入方式表示数据同时被写入页面缓存磁盘。写回方式可以提高写入性能,但也增加了数据丢失的风险。 4. 文件同步(File Sync):Linux提供了sync命令和fsync系统调用来进行文件同步操作文件同步会强制将页面缓存中的数据立即写入磁盘,确保数据的持久化存储。文件同步可以用于保证数据的一致性,但也会带来性能上的开销。 总之,Linux的缓存机制通过使用页面缓存、直接IO和写回等方式,提高了文件系统和磁盘I/O的性能,并在性能和数据一致性方面做出了权衡。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值