使用C语言中的fread来读取文件

5

我在操作系统和C语言方面缺乏正式的知识。我的问题如下:

  1. 当我尝试使用C语言中的fread读取文件的第一个字节时,是将包含该字节的整个磁盘块带入内存,还是只有这个字节?
  2. 如果整个块被带入内存,在读取第二个字节时会发生什么,因为包含该字节的块已经在内存中了?
  3. 以磁盘块大小读取文件是否具有重要意义?
  4. 读取的文件块保存在哪里的内存中?
1个回答

5

这是我的答案

  1. 默认缓存为64k,超过1个块。可以通过setvbuffer更改。
  2. 第二次读取时,不涉及I/O操作。数据来自磁盘缓存。
  3. 不,文件通常比它的磁盘空间小。即使在实际磁盘空间大小范围内,如果读取超出文件大小,将会收到错误提示。
  4. 这是FILE结构的一部分。这是实现(编译器)特定的,请勿修改。

以上缓存是由C运行时库而非操作系统使用的。操作系统可能具有磁盘缓存功能,这是一个单独的机制。


ж“ҚдҪңзі»з»ҹзҡ„зј“еӯҳжҳҜдёҺз”ЁжҲ·з©әй—ҙFILEз»“жһ„дёӯдҪҝз”Ёзҡ„зј“еҶІеҢәдёҚеҗҢзҡ„еҶ…еӯҳгҖӮFILEзј“еҶІеҢәжҳҜеҹәдәҺдёӘеҲ«и®ҫзҪ®зҡ„пјҢеҸӘжңүй»ҳи®Өи®ҫзҪ®з”ұзј–иҜ‘еҷЁзҺҜеўғи®ҫзҪ®гҖӮ - Devolus
1
没错,我已经在答案中添加了简短的解释。同时也修正了拼写错误 :( - egur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接