X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filestd.tex;h=aa4d1ccfa3e1475b45e4fd019cca5e5acad96e7d;hp=d46f965842ea2895924ef4e112bc8224a3d565b7;hb=e83be2da028abd74433573a4b17299badedb04e1;hpb=56a7803a5e9f18850548c186b7aa9813b071107d diff --git a/filestd.tex b/filestd.tex index d46f965..aa4d1cc 100644 --- a/filestd.tex +++ b/filestd.tex @@ -26,7 +26,7 @@ costituire il nucleo\footnote{queste funzioni sono state implementate la prima \subsection{I \textit{file stream}} \label{sec:file_stream} -Come più volte ribadito l'interfaccia dei file descriptor è una interfaccia di +Come più volte ribadito l'interfaccia dei file descriptor è un'interfaccia di basso livello, che non provvede nessuna forma di formattazione dei dati e nessuna forma di bufferizzazione per ottimizzare le operazioni di I/O. @@ -92,10 +92,10 @@ definiti nell'header \file{stdio.h} che sono: cui il processo riceve ordinariamente i dati in ingresso. Normalmente è associato dalla shell all'input del terminale e prende i caratteri dalla tastiera. -\item[\var{FILE *stdout}] Lo \textit{standard input} cioè lo stream su +\item[\var{FILE *stdout}] Lo \textit{standard output} cioè lo stream su cui il processo invia ordinariamente i dati in uscita. Normalmente è associato dalla shell all'output del terminale e scrive sullo schermo. -\item[\var{FILE *stderr}] Lo \textit{standard input} cioè lo stream su +\item[\var{FILE *stderr}] Lo \textit{standard error} cioè lo stream su cui il processo è supposto inviare i messaggi di errore. Normalmente anch'esso è associato dalla shell all'output del terminale e scrive sullo schermo. @@ -121,7 +121,7 @@ La bufferizzazione 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 +automaticamente dalla libreria, ma costituisce anche uno degli aspetti più comunemente fraintesi, in particolare per quello che riguarda l'aspetto della scrittura dei dati sul file. @@ -209,9 +209,9 @@ corrente in uno stream. \label{sec:file_fopen} Le funzioni che si possono usare per aprire uno stream sono solo tre: -\func{fopen}, \func{fdopen} e \func{freopen}\footnote{\func{fopen} e +\func{fopen}, \func{fdopen} e \func{freopen},\footnote{\func{fopen} e \func{freopen} fanno parte dello standard ANSI C, \func{fdopen} è parte - dello standard POSIX.1.}, i loro prototipi sono: + dello standard POSIX.1.} i loro prototipi sono: \begin{functions} \headdecl{stdio.h} \funcdecl{FILE *fopen(const char *path, const char *mode)} @@ -280,7 +280,7 @@ possono essere aperti con le funzioni delle librerie standard del C. \hline \end{tabular} \caption{Modalità di apertura di uno stream dello standard ANSI C che - sono sempre presenti in qualunque sistema POSIX} + sono sempre presenti in qualunque sistema POSIX.} \label{tab:file_fopen_mode} \end{table} @@ -321,8 +321,8 @@ valore \macro{S\_IRUSR|S\_IWUSR|S\_IRGRP|S\_IWGRP|S\_IROTH|S\_IWOTH} processo (si veda \secref{sec:file_umask}). In caso di file aperti in lettura e scrittura occorre ricordarsi che c'è -di messo una bufferizzazione; per questo motivo lo standard ANSI C -richiede che ci sia una operazione di posizionamento fra una operazione +di mezzo una bufferizzazione; per questo motivo lo standard ANSI C +richiede che ci sia un'operazione di posizionamento fra un'operazione di output ed una di input o viceversa (eccetto il caso in cui l'input ha incontrato la fine del file), altrimenti una lettura può ritornare anche il risultato di scritture precedenti l'ultima effettuata. @@ -332,7 +332,7 @@ una scrittura una delle funzioni \func{fflush}, \func{fseek}, \func{fsetpos} o \func{rewind} prima di eseguire una rilettura; viceversa nel caso in cui si voglia fare una scrittura subito dopo aver eseguito una lettura occorre prima usare una delle funzioni \func{fseek}, \func{fsetpos} o \func{rewind}. Anche -una operazione nominalmente nulla come \code{fseek(file, 0, SEEK\_CUR)} è +un'operazione nominalmente nulla come \code{fseek(file, 0, SEEK\_CUR)} è sufficiente a garantire la sincronizzazione. Una volta aperto lo stream, si può cambiare la modalità di bufferizzazione @@ -601,7 +601,7 @@ viene implementata con una macro, per cui occorre stare attenti a cosa le si passa come argomento, infatti \param{stream} può essere valutato più volte nell'esecuzione, e non viene passato in copia con il meccanismo visto in \secref{sec:proc_var_passing}; per questo motivo se -si passa una espressione si possono avere effetti indesiderati. +si passa un'espressione si possono avere effetti indesiderati. Invece \func{fgetc} è assicurata essere sempre una funzione, per questo motivo la sua esecuzione normalmente è più lenta per via dell'overhead @@ -1155,7 +1155,7 @@ Entrambe le funzioni prendono come parametro \param{strptr} che deve essere l'indirizzo di un puntatore ad una stringa di caratteri, in cui verrà restituito (si ricordi quanto detto in \secref{sec:proc_var_passing} a proposito dei \textit{value result argument}) l'indirizzo della stringa -allogata automaticamente dalle funzioni. Occorre inoltre ricordarsi di +allocata automaticamente dalle funzioni. Occorre inoltre ricordarsi di invocare \func{free} per liberare detto puntatore quando la stringa non serve più, onde evitare memory leak. @@ -1470,9 +1470,9 @@ e \func{setlinebuf}, i loro prototipi sono: \noindent tutte queste funzioni sono realizzate con opportune chiamate a \func{setvbuf} e sono definite solo per compatibilità con le vecchie librerie BSD. Infine le \acr{glibc} provvedono le funzioni non standard\footnote{anche - queste sono originarie di Solaris} \func{\_\_flbf} e \func{\_\_fbufsize} che -permettono di leggere le proprietà di bufferizzazione di uno stream; i cui -prototipi sono: + queste funzioni sono originarie di Solaris.} \func{\_\_flbf} e +\func{\_\_fbufsize} che permettono di leggere le proprietà di bufferizzazione +di uno stream; i cui prototipi sono: \begin{functions} \headdecl{stdio\_ext.h} @@ -1497,7 +1497,7 @@ scelta, si pu \end{prototype} \noindent anche di questa funzione esiste una analoga \func{fflush\_unlocked}\footnote{accessibile definendo \macro{\_BSD\_SOURCE} o - \macro{\_SVID\_SOURCE} o \macro{\_GNU\_SOURCE}} che non effettua il blocco + \macro{\_SVID\_SOURCE} o \macro{\_GNU\_SOURCE}.} che non effettua il blocco dello stream. Se \param{stream} è \macro{NULL} lo scarico dei dati è forzato per tutti gli