I have the following question regarding C file I/O.
At a physical level (harddrive), is it valid to assume that every fread(n_blocks, size, length,FILE fp)
No it's not. You can't even assume that an fread
will trigger physical I/O. Your OS has the possibility to do a lot of stuff with I/O requests, including caching the results, reordering and coalescing (or splitting) reads (and even sometimes writes).
If there is a lot of I/O going on, you can't count on getting sequential reads either, depending on what size buffer you (and possibly the I/O stream library) use. Some operating systems provide ways to "hint" that you will be reading sequentially on a file descriptor (or mmap
ed region) which could help.