在C中使用fread读取文件

时间:2013-12-07 15:54:03

标签: c operating-system

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

  1. 当我尝试在C中使用fread读取文件的第一个单字节时,包含该字节的整个磁盘块是否被带入内存或只是字节?
  2. 如果将整个块放入内存,读取时会发生什么 自包含该字节的块以来的第二个字节 存储器?
  3. 读取磁盘块大小的文件有意义吗?
  4. 读取文件块保存在内存中的哪个位置?

1 个答案:

答案 0 :(得分:5)

这是我的答案

  1. 超过1个块,默认缓存为64k。 setvbuffer可以改变这一点。
  2. 在第二次阅读时,没有I / O.数据从磁盘缓存中读取。
  3. 不,文件比它的磁盘空间小得多。即使您在实际磁盘空间大小范围内,也会在读取文件大小时收到错误。
  4. 它是FILE结构的一部分。这是特定于实现(编译器)的,所以不要触摸它。
  5. 上述缓存由C运行时库而不是OS使用。操作系统可能有也可能没有磁盘缓存,是一种单独的机制。