Действительно ли он читает символ за символом или считывает некоторые байты в буфер ядра и возвращает пользовательский символ за символом?
То же самое с fgets?
fgets
Позвольте мне сказать, что я использую glibc и компилятор gcc.
Почти верно.Типичная современная реализация, которая имеет разделение пользователь / ядро, хранит байты в пользовательском буфере , а не в буфере ядра.Таким образом, многие вызовы fgetc фактически вызывают несколько истинных системных вызовов.
fgetc