Qui ci sono un paio di cose da capire. Uno è la differenza tra I/O bufferizzato e I/O senza buffer. Il concetto è abbastanza semplice - per l'I/O bufferizzato, c'è un buffer interno che viene mantenuto. Solo quando il buffer è pieno (o qualche altro evento, ad esempio quando raggiunge una nuova riga), l'output viene "svuotato". Con l'I/O senza buffer, ogni volta che viene effettuata una chiamata per generare qualcosa, lo farà, 1 carattere alla volta.
maggior parte delle funzioni di I/O rientrano nella categoria tamponata, principalmente per motivi di prestazioni: è molto più veloce di scrivere pezzi alla volta (tutte le funzioni di I/O alla fine scendere a chiamate di sistema di qualche descrizione, che sono costosi.)
flush
consente di scegliere manualmente quando si desidera che questo buffer interno venga scritto: una chiamata per il flush scriverà qualsiasi carattere nel buffer. Generalmente, questo non è necessario, perché lo stream gestirà questo stesso. Tuttavia, ci possono essere situazioni in cui vuoi essere sicuro che qualcosa venga emesso prima di continuare: è qui che utilizzi una chiamata allo flush()
.
Credo che questo imponga tutti i dati da stampare alla console per essere immediatamente "svuotati" sulla console effettiva e lasciare il buffer di stampa in sospeso –
@ChristianStewart Non riesco a ottenere il concetto. Puoi indicarmi un esempio pratico? –
@ChristianStewart: Non sono sicuro che sia sempre il caso, ricordo casi in cui era necessario avere una nuova riga per "autoflush". Questo probabilmente dipende dal sistema operativo sottostante. – Anthon