The C runtime library dates back from a time long, long before operating systems supported threads. The spec was never updated to say what
should happen when two threads call fread() on the same file. So library writers had to fend for themselves to make the old spec work. It is not like the CRT gave programmers another way. The odds that you are
actually ahead by trying to bypass the lock is very low, I/O is quite slow. That however is not true in all cases, locale is punishingly expensive for example. —
Hans Passant 25 secs ago