Se la realizzazione libreria può determinare il flusso di uscita non si riferiscono ad un dispositivo interattivo (e solo poi), il flusso sarà completamente tamponato, cioè saranno svuotate quando il buffer (default di BUFSIZ
dimensioni) è pieno.
Se non fully-buffered, un flusso può essere tamponata linea, vale a dire che verrà lavato quando un '\n'
è scritto (o il buffer è pieno, se la vostra linea è davvero lunga), o senza buffer.
(ISO/IEC 9899: 1999, capitolo 7.19.5.3 "La funzione fopen()
", comma 7. Non hanno una versione più recente dello standard a portata di mano, ma per quanto ne so questo non è cambiato.)
Ciò che costituisce un "dispositivo interattivo" è definito dall'implementazione. (Capitolo 5.1.2.3 "Esecuzione del programma", paragrafo 6.)
L'idea generale è che l'output del file debba essere completamente bufferizzato mentre l'uscita del terminale deve essere bufferizzata in linea (o unbuffered, come correttamente sottolineato da Jesse Good).
Sia il criterio di buffering che la dimensione del buffer possono essere modificati tramite setvbuf()
. Si noti che qualsiasi modifica di questo tipo deve avvenire prima dello si inizia ad accedere allo stream, il che è piuttosto ovvio una volta che ci si pensa.
Abbastanza sicuro che dipende dal sistema operativo. – Phonon
BTW in realtà il codice utilizza un wxTextOutputStream che utilizza un wxFFileOutoutStream che utilizza un wxFFile. Ma questo incapsula solo una struttura FILE quindi immagino che il meccanismo di fflush sia la cosa interessante qui ... – anhoppe
Se è bufferizzato, viene svuotato una volta che il buffer è pieno. E non capisco cosa intendi per struttura FILE (fopen , fwrite, ....) –