Reading file using fread in C

c, operating-system

Solution

Here's my answers

- More than 1 block, default caching is 64k. `setvbuffer` can change that.

- On the second read, there's no I/O. The data is read from the disk cache.

- 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.

- 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.

Problem

I lack formal knowledge in Operating systems and C. My questions are as follows. - 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? - If entire block is brought into memory, what happens on reading second byte since the block containing that byte is already in memory?. - Is there significance in reading the file in size of disk blocks? - Where is the read file block kept in memory?

Original source