Correzioni ortografiche ed inizio della bufferizzazione sui file
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 24 Nov 2001 00:39:42 +0000 (00:39 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 24 Nov 2001 00:39:42 +0000 (00:39 +0000)
filestd.tex
gapil.tex
intro.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.
 
 
index 8b2d5f26303593f908a7061c3e06b04265206f75..ed7c9d6ddd6016b55f77a11c05571297adea2ea6 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
@@ -1,4 +1,4 @@
-%%
+%% 
 %% GaPiL : Guida alla Programmazione in Linux
 %%
 %% S. Piccardi Oct. 2000
 %% GaPiL : Guida alla Programmazione in Linux
 %%
 %% S. Piccardi Oct. 2000
index a43192a2f373a045632a5e1a8dfcef4cb7c64738..29554b9b727d56fe0628de06bf39229c5d1facab 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -299,7 +299,7 @@ standardizzare l'interfaccia con il sistema operativo.
 
 Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di
 libreria, e in seguito sono stati prodotti anche altri standard per la shell e
 
 Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di
 libreria, e in seguito sono stati prodotti anche altri standard per la shell e
-le utilities di sistema (1003.2), per le estensioni realtime e per i thread
+le utility di sistema (1003.2), per le estensioni realtime e per i thread
 (1003.1d e 1003.1c) e vari altri. 
 
 Benché lo standard POSIX sia basato sui sistemi unix esso definisce comunque
 (1003.1d e 1003.1c) e vari altri. 
 
 Benché lo standard POSIX sia basato sui sistemi unix esso definisce comunque
@@ -333,7 +333,7 @@ fra cui le specifiche delle API per l'interfaccia grafica (X11).
 
 Nel 1992 lo standard venne rivisto con una nuova versione della guida, la
 Issue 4 (da cui la sigla XPG4) che aggiungeva l'interfaccia XTI (\textit{X
 
 Nel 1992 lo standard venne rivisto con una nuova versione della guida, la
 Issue 4 (da cui la sigla XPG4) che aggiungeva l'interfaccia XTI (\textit{X
-  transport Interface}) mirante a soppiantare (senza molto successo)
+  Transport Interface}) mirante a soppiantare (senza molto successo)
 l'interfaccia dei socket derivata da BSD. Una seconda versione della guida fu
 rilasciata nel 1994, questa è nota con il nome di Spec 1170 (dal numero delle
 interfacce, header e comandi definiti). 
 l'interfaccia dei socket derivata da BSD. Una seconda versione della guida fu
 rilasciata nel 1994, questa è nota con il nome di Spec 1170 (dal numero delle
 interfacce, header e comandi definiti). 
@@ -382,7 +382,7 @@ dell'Universit
 di API grande rilievo, come il link simbolici (vedi \secref{sec:file_symlink},
 la funzione \func{select}, i socket.
 
 di API grande rilievo, come il link simbolici (vedi \secref{sec:file_symlink},
 la funzione \func{select}, i socket.
 
-Queste estensioni sono state via via aggiunte al sistema nelle varie release
+Queste estensioni sono state via via aggiunte al sistema nelle varie versioni
 del sistema (BSD 4.2, BSD 4.3 e BSD 4.4) come pure in alcuni derivati
 commerciali come SunOS. Le \acr{glibc} provvedono tutte queste estensioni che
 sono state in gran parte incorporate negli standard successivi.
 del sistema (BSD 4.2, BSD 4.3 e BSD 4.4) come pure in alcuni derivati
 commerciali come SunOS. Le \acr{glibc} provvedono tutte queste estensioni che
 sono state in gran parte incorporate negli standard successivi.
@@ -395,8 +395,8 @@ Come noto Unix nasce nei laboratori della AT/T, che ne registr
 marchio depositato, sviluppandone una serie di versioni diverse; nel 1983 la
 versione supportata ufficialmente venne rilasciata al pubblico con il nome di
 Unix System V. Negli anni successivi l'AT/T proseguì lo sviluppo rilasciando
 marchio depositato, sviluppandone una serie di versioni diverse; nel 1983 la
 versione supportata ufficialmente venne rilasciata al pubblico con il nome di
 Unix System V. Negli anni successivi l'AT/T proseguì lo sviluppo rilasciando
-varie release con aggiunte e integrazioni; nel 1989 un accordo fra vari
-venditori (AT/T, Sun, HP, e altro) portò ad una release che provvedeva una
+varie versioni con aggiunte e integrazioni; nel 1989 un accordo fra vari
+venditori (AT/T, Sun, HP, e altro) portò ad una versione che provvedeva una
 unificazione dell interfacce comprendente Xenix e BSD, la System V release 4.
 
 La interfaccia di questa ultima release è descritta in un documento dal titolo
 unificazione dell interfacce comprendente Xenix e BSD, la System V release 4.
 
 La interfaccia di questa ultima release è descritta in un documento dal titolo
@@ -449,8 +449,8 @@ Le macro disponibili per i vari standard sono le seguenti:
   di questa non viene preso in considerazione.
 \item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
   positivo si controlla quale livello delle funzionalità specificate da POSIX
   di questa non viene preso in considerazione.
 \item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
   positivo si controlla quale livello delle funzionalità specificate da POSIX
-  viene messa a disposizone; più alto è il valore maggiori sono le
-  funzionalità. Se è uagule a '1' vengono attivate le funzionalità specificate
+  viene messa a disposizione; più alto è il valore maggiori sono le
+  funzionalità. Se è uguale a '1' vengono attivate le funzionalità specificate
   nella edizione del 1990 (IEEE Standard 1003.1-1990), valori maggiori o
   uguali a '2' attivano le funzionalità POSIX.2 specificate nell'edizione del
   1992 (IEEE Standard 1003.2-1992). Un valore maggiore o uguale a `199309L'
   nella edizione del 1990 (IEEE Standard 1003.1-1990), valori maggiori o
   uguali a '2' attivano le funzionalità POSIX.2 specificate nell'edizione del
   1992 (IEEE Standard 1003.2-1992). Un valore maggiore o uguale a `199309L'