САБЖ! Он перебирает весь файл, пока не наткнеться на EOF, или это значение уже где-то храниться? Функции для этого можете не предлагать, интересует именно сам механизм...
Нет такого символа как EOF, в C/libc EOF - это константа, которая не входит в диапазон char, но может быть возвращена при фактическом достижении конца файла. Размер отдает, как уже правильно сказали, файловая система или VFS(из incore inode) в ответ на вызов stat.