Il runtime C quando tu richiami le funzioni di scrittura su file non scrive immediatamente quello che gli hai detto di scrivere, ma piuttosto lo salva in un suo buffer privato in attesa che la quantità di dati da scrivere superi una certa soglia (diciamo 1 KB); una volta raggiunta questa soglia, il runtime effettua la scrittura vera e propria e svuota il buffer (operazione detta complessivamente "flushing del buffer"). In questa maniera viene minimizzato il numero di scritture effettuate, operazioni "costose" in termini di tempo per numerosi motivi e che richiedono, indipendentemente dalla quantità di dati da scrivere, un certo overhead più o meno costante per ogni scrittura (passaggio in kernel-mode, spostamento della testina del disco nella posizione corretta, ...); effettuando poche scritture si minimizza l'impatto di questo overhead rispetto all'effettivo tempo di scrittura.
Un'operazione analoga avviene con la lettura (readahead): invece di avvenire solo per i dati che chiedi, la lettura avviene per blocchi (diciamo, anche qui, di 1 KB), sempre allo scopo di minimizzare il numero di letture.