Correzioni ortografiche ed inizio della bufferizzazione sui file
[gapil.git] / filestd.tex
index ed3bce3da38cfec116ead48ff91f546538b97cb7..ed954ac686b5bda6824a05d4b850492358674b6a 100644 (file)
@@ -4,7 +4,7 @@
 Esamineremo in questo capitolo l'interfaccia standard ANSI C per i file,
 quella che viene comunemente detta interfaccia degli \textit{stream}.
 Dopo una breve sezione introduttiva tratteremo le funzioni base per la
 Esamineremo in questo capitolo l'interfaccia standard ANSI C per i file,
 quella che viene comunemente detta interfaccia degli \textit{stream}.
 Dopo una breve sezione introduttiva tratteremo le funzioni base per la
-gestione dell'input/output, mentre tratteremo le caratteristiche più aanzate
+gestione dell'input/output, mentre tratteremo le caratteristiche più avanzate
 dell'interfaccia nell'ultima sezione.
 
 
 dell'interfaccia nell'ultima sezione.
 
 
@@ -36,9 +36,9 @@ I/O con i file descriptor, evidenziando come le prestazioni ottimali si
 ottengano quando il buffer dei dati ha la stessa dimensione dei blocchi del
 filesystem (il valore dato dal campo \var{st\_blksize} di \var{fstat}).
 
 ottengano quando il buffer dei dati ha la stessa dimensione dei blocchi del
 filesystem (il valore dato dal campo \var{st\_blksize} di \var{fstat}).
 
-In questo caso se il porgrammatore non si cura di effettuare le operazioni in
+In questo caso se il programmatore non si cura di effettuare le operazioni in
 blocchi di dimensioni adeguate, le prestazioni possono deteriorarsi in maniera
 blocchi di dimensioni adeguate, le prestazioni possono deteriorarsi in maniera
-evidetne. L'interfaccia degli stream provvede da sola la gestione dei dettagli
+evidente. L'interfaccia degli stream provvede da sola la gestione dei dettagli
 della bufferizzazione e dell'esecuzione delle operazioni di lettura e
 scrittura effettive in blocchi di dimensioni appropriate all'ottenimento della
 massima efficienza.
 della bufferizzazione e dell'esecuzione delle operazioni di lettura e
 scrittura effettive in blocchi di dimensioni appropriate all'ottenimento della
 massima efficienza.
@@ -98,7 +98,7 @@ tre stream sono definiti nell'header \file{stdio.h} e sono:
 
 Nelle \acr{glibc} \var{stdin}, \var{stdout} e \var{stderr} sono effettivamente
 tre variabili che possono essere usate come tutte le altre, ad esempio si può
 
 Nelle \acr{glibc} \var{stdin}, \var{stdout} e \var{stderr} sono effettivamente
 tre variabili che possono essere usate come tutte le altre, ad esempio si può
-effettuare una redirezione dell'ouput di un programma con il semplice codice:
+effettuare una redirezione dell'output di un programma con il semplice codice:
 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
     fclose (stdout);
     stdout = fopen ("standard-output-file", "w");
 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
     fclose (stdout);
     stdout = fopen ("standard-output-file", "w");
@@ -110,13 +110,39 @@ usata \func{freopen}.
 \subsection{Le modalità di bufferizzazione}
 \label{sec:file_buffering}
 
 \subsection{Le modalità di bufferizzazione}
 \label{sec:file_buffering}
 
+La bufferizzazione è una delle caratteristiche principali della interfaccia
+degli stream; lo scopo è quello di ridurre al minimo il numero di system call
+(\func{read} o \func{write}) eseguite nelle operazioni di input/output. Questa
+funzionalità è assicurata automaticamente dalla libreria, ma costituisce anche
+una degli aspetti più comunemente fraintesi.
+
+I caratteri che vengono scritti su uno stream normalmente vengono accumulati e
+poi trasmessi in blocco in maniera asincrona, e molto spesso lo stesso avviene
+anche per la lettura (cioè dal file viene letto un blocco di dati).  Se si sta
+facendo dell'input/output interattivo però bisogna tenere presente le
+caratteristiche con cui viene effettuata la bufferizzazione, pena il rischio
+di non vedere apparire l'output o di ottenere degli effetti indesiderati nella
+visualizzazione.
+
+Per questo motivo, la libreria definisce tre distinte modalità di
+bufferizzazione, adatte a situazioni diverse, di cui occorre essere ben
+consapevoli:
+\begin{itemize}
+\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
+  al file in blocco ogni volta che viene incontrato un carattere di
+  \textit{newline} (il carattere ASCII \verb|\n|).
+\item 
+\end{itemize}
 
 
 \section{Funzioni base}
 \label{sec:file_ansi_base_func}
 
 Esamineremo in questa sezione le funzioni base dell'interfaccia degli stream,
 
 
 \section{Funzioni base}
 \label{sec:file_ansi_base_func}
 
 Esamineremo in questa sezione le funzioni base dell'interfaccia degli stream,
-analoghe a quelle di \secref{} per i file descriptor. In particolare vederemo
+analoghe a quelle di \secref{} per i file descriptor. In particolare vedremo
 come aprire, leggere, scrivere e cambiare la posizione corrente in uno stream.
 
 
 come aprire, leggere, scrivere e cambiare la posizione corrente in uno stream.