Ha úgy is karakterenként szeretnél olvasni, miért nem használsz inkább read()-et? Ez syscall, és kikerülsz minden bufferelést és egyéb csodát, amit a libc aládtesz.