c-每个fread / fwrite有多少随机/顺序访问?
作者:互联网
关于C文件I / O,我有以下问题.
在物理级别(硬盘驱动器)上,假设每个fread(n_blocks,size,length,FILE fp)操作应该对第一页(块)进行一次随机访问,对下一个块进行n-1次顺序访问是否有效?相同的缓冲区
我之所以这么认为是因为操作系统具有如此多的进程,大多数可以确保其中的一个进程也在本地程序每次读取之间写入文件或从中读取文件,并且假设硬盘驱动器位于另一个扇区/柱面.
这个假设可以吗?
解决方法:
您可以假设您想要的任何东西,实际上这要复杂得多.
fread / fwrite通常会在进程内存中的内部缓冲区中进行读写操作.当缓冲区已满/为空时,它们会将读/写转发到具有自己的缓存的操作系统.如果您正在读取并且操作系统无法在高速缓存中找到文件的那部分,那么您的程序将等到实际从硬盘驱动器中获取数据,这是一项昂贵的操作.如果您正在写,那么数据将被复制到OS缓存中并驻留在该缓存中,直到将其刷新到磁盘为止,这可能在程序关闭文件后很长时间才会发生.然后,当今的硬盘驱动器又会拥有自己的缓存,操作系统甚至可能不知道.