简体   繁体   中英

Reading file using fread in C

I lack formal knowledge in Operating systems and C. My questions are as follows.

  1. When I try to read first single byte of a file using fread in C, does the entire disk block containing that byte is brought into memory or just the byte?
  2. If entire block is brought into memory, what happens on reading second byte since the block containing that byte is already in memory?.
  3. Is there significance in reading the file in size of disk blocks?
  4. Where is the read file block kept in memory?

Here's my answers

  1. More than 1 block, default caching is 64k. setvbuffer can change that.
  2. On the second read, there's no I/O. The data is read from the disk cache.
  3. No, a file is ussuly smaller than it's disk space. You'll get an error reading past the file size even if you're within the actual disk space size.
  4. It's part of the FILE structure. This is implementation (compiler) specific so don't touch it.

The above caching is used by the C runtime library not the OS. The OS may or may not have disk caching and is a separate mechanism.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM