在C中使用fread读取文件

5 c operating-system

我缺乏操作系统和C的正式知识.我的问题如下.

  1. 当我尝试使用freadC 读取文件的第一个单字节时,包含该字节的整个磁盘块是否被带入内存或只是字节?
  2. 如果整个块被带入内存,那么读取第二个字节会发生什么,因为包含该字节的块已经在内存中了?
  3. 读取磁盘块大小的文件有意义吗?
  4. 读取文件块保存在内存中的哪个位置?

egu*_*gur 5

这是我的答案

  1. 超过1个块,默认缓存为64k.setvbuffer可以改变这一点.
  2. 在第二次阅读时,没有I/O. 从磁盘缓存中读取数据.
  3. 不,文件比它的磁盘空间小得多.即使您在实际磁盘空间大小范围内,也会在读取文件大小时收到错误消息.
  4. 它是FILE结构的一部分.这是特定于实现(编译器)的,所以不要触摸它.

上面的缓存由C运行时库而不是OS使用.操作系统可能有也可能没有磁盘缓存,是一种单独的机制.