+serie di funzioni che permettono di controllare il comportamento degli stream;
+se non si è specificato nulla la modalità di buffering viene decisa
+autonomamente sulla base del tipo di file sottostante, ed i buffer vengono
+allocati automaticamente.
+
+Però una volta che si sia aperto lo stream (ma prima di aver compiuto
+operazioni su di esso) è possibile intervenire sulle modalità di buffering; la
+funzione che permette di controllare la bufferizzazione è \func{setvbuf}, il
+suo prototipo è:
+\begin{prototype}{stdio.h}{int setvbuf(FILE *stream, char *buf, int mode,
+ size\_t size)}
+
+ Setta la bufferizzazione dello stream \param{stream} nella modalità indicata
+ da \param{mode}, usando \param{buf} come buffer di lunghezza \param{size}.
+
+ \bodydesc{Restituisce zero in caso di successo, ed un valore qualunque in
+ caso di errore.}
+\end{prototype}
+
+La funzione permette di controllare tutti gli aspetti della bufferizzazione;
+l'utente può specificare un buffer da usare al posto di quello allocato dal
+sistema passandone alla funzione l'indirizzo in \param{buf} e la dimensione in
+\param{size}.
+
+Ovviamente se si usa un buffer specificato dall'utente questo deve essere
+stato allocato e restare disponibile per tutto il tempo in cui si opera sullo
+stream. In genere conviene allocarlo con \func{malloc} e disallocarlo dopo la
+chiusura del file, ma fintanto che il file è usato all'interno di una
+funzione, può anche essere usata una variabile automatica; in genere è
+definita una macro \macro{BUFSIZ} che indica le dimensioni ottimali del
+buffer. Dato che la procedura è macchinosa e comporta dei rischi (come delle
+scritture accidentali sul buffer) è sempre meglio lasciare allocare il buffer
+alle funzioni di librerie, che sono in grado di farlo in maniera ottimale e
+trasparente all'utente.
+
+Per evitare il settaggio del buffer basta passare un valore \macro{NULL} per
+\param{buf} e la funzione ignorerà il parametro \param{size} usando il buffer
+allocato automaticamente dal sistema. In questo modo si potrà comunque
+modificare la modalità di bufferizzazione, passando in \param{mode} uno degli
+opportuni valori elencati in \ntab; qualora si specifiche la modalità non
+bufferizzata i valori di \param{buf} e \param{size} vengono ignorati.
+
+\begin{table}[htb]
+ \centering
+ \begin{tabular}[c]{|l|l|}
+ \hline
+ \textbf{Valore} & \textbf{Modalità} \\
+ \hline
+ \hline
+ \macro{\_IONBF} & \textit{unbuffered}\\
+ \macro{\_IOLBF} & \textit{line buffered}\\
+ \macro{\_IOFBF} & \textit{fully buffered}\\
+ \hline
+ \end{tabular}
+ \label{tab:file_stream_buf_mode}
+ \caption{Valori del parametro \param{mode} di \func{setvbuf}
+ per il settaggio delle modalità di bufferizzazione.}
+\end{table}
+
+Oltre a \func{setvbuf} le \acr{glibc} definiscono altre tre funzioni per la
+gestione della bufferizzazione di uno stream: \func{setbuf}, \func{setbuffer}
+e \func{setlinebuf}, i loro prototipi sono:
+\begin{functions}
+ \headdecl{stdio.h}
+
+ \funcdecl{void setbuf(FILE *stream, char *buf)} Disabilita la
+ bufferizzazione se \param{buf} è \macro{NULL}, altrimenti usa \param{buf}
+ come buffer di dimensione \macro{BUFSIZ} in modalità \textit{fully buffered}.
+
+ \funcdecl{void setbuffer(FILE *stream, char *buf, size\_t size)} Disabilita
+ la bufferizzazione se \param{buf} è \macro{NULL}, altrimenti usa \param{buf}
+ come buffer di dimensione \param{size} in modalità \textit{fully buffered}.
+
+ \funcdecl{void setlinebuf(FILE *stream)} Pone lo stream in modalità
+ \textit{line buffered}.
+\end{functions}
+\noindent tutte queste funzioni sono realizzate con opportune chiamate a
+\func{setvbuf} e sono definite solo per compatibilità con le vecchie librerie
+BSD.
+
+Sempre seguendo Solaris le \acr{glibc} provvedono alcune estensioni non
+standard che permettono di leggere le proprietà di bufferizzazione di uno
+stream; dette funzioni sono:
+\begin{functions}
+ \headdecl{stdio\_ext.h}
+
+ \funcdecl{int \_\_flbf(FILE *stream)} Restituisce un valore diverso da zero
+ se \param{stream} è in modalità \textit{line buffered}.
+
+ \funcdecl{size\_t \_\_fbufsize(FILE *stream)} Restituisce le dimensioni del
+ buffer di \param{stream}.
+\end{functions}
+