From: Simone Piccardi Date: Sat, 24 Nov 2001 21:25:23 +0000 (+0000) Subject: Avanti bufferizzazione X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=1fc7f2b44aad15d5a26b248373f21bc25c5a96dc;ds=sidebyside Avanti bufferizzazione --- diff --git a/filestd.tex b/filestd.tex index ed954ac..79fa4fa 100644 --- a/filestd.tex +++ b/filestd.tex @@ -131,12 +131,33 @@ consapevoli: \item \textit{unbuffered}: in questa modalità i caratteri non sono bufferizzati e vengono trasmessi individualmente al file non appena possibile (effettuando immediatamente una \func{write}). -\item \textit{line unbuffered}: in questo caso i caratteri vengono trasmessi +\item \textit{line buffered}: in questo caso i caratteri vengono trasmessi al file in blocco ogni volta che viene incontrato un carattere di \textit{newline} (il carattere ASCII \verb|\n|). -\item +\item \textit{fully buffered}: in questo caso i caratteri vengono trasmessi da + e verso il file in blocchi di dimensione opportuna. \end{itemize} +Lo standard ANSI C specifica soltanto che lo standard output e lo standard +input siano aperti in modalità \textit{fully buffered} quando non fanno +riferimento ad un dispositivo interattivo, e che lo standard error non sia mai +aperto in modalità \textit{fully buffered}. + +Linux, come BSD e SRv4, specifica il comportamento di default in maniera più +precisa, e cioè impone che lo standard error sia sempre \textit{unbuffered} +(in modo che i messaggi di errore siano mostrati il più rapidamente possibile) +e che standard input e standard output siano aperti in modalità \textit{line + buffered} quando sono associati ad un terminale (od altro dispositivo +interattivo) e in modalità \textit{fully buffered} altrimenti. + +Il comportamento specificato per standard input e standard output vale anche +per tutti i nuovi stream aperti da un processo; la selezione comunque avviene +automaticamente, e la libreria apre lo stream nella modalità più opportuna a +seconda file o al dispositivo scelto. + +La modalità \textit{line buffered} è quella passibile di maggiori +fraintendimenti, + \section{Funzioni base} \label{sec:file_ansi_base_func}