Aggiunte mknod e mkfifo, e fatta una passata di ispell
[gapil.git] / filestd.tex
index 6348a7daa0978b0a775ee32be414d44d5aea3943..0070226a6f0363da8754d42d2084048e0f539a6b 100644 (file)
@@ -228,7 +228,7 @@ prototipi sono:
     viene settata al valore ricevuto dalla funzione sottostante di cui è
     fallita l'esecuzione.
   
     viene settata al valore ricevuto dalla funzione sottostante di cui è
     fallita l'esecuzione.
   
-    Gli errori pertanto possono essere quelli di \func{malloc} per tutte
+    Gli errori pertanto possono essere quelli di \code{malloc} per tutte
     e tre le funzioni, quelli \func{open} per \func{fopen}, quelli di
     \func{fcntl} per \func{fdopen} e quelli di \func{fopen},
     \func{fclose} e \func{fflush} per \func{freopen}.}
     e tre le funzioni, quelli \func{open} per \func{fopen}, quelli di
     \func{fcntl} per \func{fdopen} e quelli di \func{fopen},
     \func{fclose} e \func{fflush} per \func{freopen}.}
@@ -284,7 +284,7 @@ possono essere aperti con le funzioni delle librerie standard del C.
 In realtà lo standard ANSI C prevede un totale di 15 possibili valori
 diversi per \param{mode}, ma in \tabref{tab:file_fopen_mode} si sono
 riportati solo i sei valori effettivi, ad essi può essere aggiunto pure
 In realtà lo standard ANSI C prevede un totale di 15 possibili valori
 diversi per \param{mode}, ma in \tabref{tab:file_fopen_mode} si sono
 riportati solo i sei valori effettivi, ad essi può essere aggiunto pure
-il carattere \func{b} (come ultimo carattere o nel mezzo agli altri per
+il carattere \texttt{b} (come ultimo carattere o nel mezzo agli altri per
 le stringhe di due caratteri) che in altri sistemi operativi serve a
 distinguere i file binari dai file di testo; in un sistema POSIX questa
 distinzione non esiste e il valore viene accettato solo per
 le stringhe di due caratteri) che in altri sistemi operativi serve a
 distinguere i file binari dai file di testo; in un sistema POSIX questa
 distinzione non esiste e il valore viene accettato solo per
@@ -304,13 +304,12 @@ valore \verb|STRING| 
 e \func{fopen} marca il file per l'uso dei caratteri estesi e abilita le
 opportune funzioni di conversione in lettura e scrittura.
 
 e \func{fopen} marca il file per l'uso dei caratteri estesi e abilita le
 opportune funzioni di conversione in lettura e scrittura.
 
-Inoltre nel caso si usi \func{fdopen} i valori specificati da
-\param{mode} devono essere compatibili con quelli con cui il file
-descriptor è stato aperto. Inoltre i modi \cmd{w} e \cmd{w+} non
-troncano il file. La posizione nello stream viene settata a quella
-corrente nel file descriptor, e le variabili di errore e di fine del
-file (vedi \secref{sec:file_io}) sono cancellate. Il file non viene
-duplicato e verrà chiuso alla chiusura dello stream.
+Nel caso si usi \func{fdopen} i valori specificati da \param{mode} devono
+essere compatibili con quelli con cui il file descriptor è stato aperto.
+Inoltre i modi \cmd{w} e \cmd{w+} non troncano il file. La posizione nello
+stream viene settata a quella corrente nel file descriptor, e le variabili di
+errore e di fine del file (vedi \secref{sec:file_io}) sono cancellate. Il file
+non viene duplicato e verrà chiuso alla chiusura dello stream.
 
 I nuovi file saranno creati secondo quanto visto in
 \secref{sec:file_ownership} ed avranno i permessi di accesso settati al
 
 I nuovi file saranno creati secondo quanto visto in
 \secref{sec:file_ownership} ed avranno i permessi di accesso settati al
@@ -330,7 +329,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
 \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 \func{fseek(file, 0, SEEK\_CUR)} è
+una 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
 sufficiente a garantire la sincronizzazione.
 
 Una volta aperto lo stream, si può cambiare la modalità di bufferizzazione
@@ -355,9 +354,9 @@ dati presenti nei buffer in user space usati dalle \acr{glibc}; se si vuole
 essere sicuri che il kernel forzi la scrittura su disco occorrerà effettuare
 una \func{sync} (vedi \secref{sec:file_sync}).
 
 essere sicuri che il kernel forzi la scrittura su disco occorrerà effettuare
 una \func{sync} (vedi \secref{sec:file_sync}).
 
-Linux supporta, come estensione implementata dalle \acr{glibc}, anche una
-altra funzione, \func{fcloseall}, che serve a chiudere tutti i file, il suo
-prototipo è:
+Linux supporta anche una altra funzione, \func{fcloseall}, come estensione GNU
+implementata dalle \acr{glibc}, accessibile avendo definito
+\macro{\_GNU\_SOURCE}, il suo prototipo è:
 \begin{prototype}{stdio.h}{int fcloseall(void)}
   Chiude tutti gli stream. 
   
 \begin{prototype}{stdio.h}{int fcloseall(void)}
   Chiude tutti gli stream. 
   
@@ -396,7 +395,7 @@ notificato come tale dai valori di uscita delle varie funzioni. Nella
 maggior parte dei casi questo avviene con la restituzione del valore
 intero (di tipo \type{int}) \macro{EOF}\footnote{la costante deve essere
   negativa, le \acr{glibc} usano -1, altre implementazioni possono avere
 maggior parte dei casi questo avviene con la restituzione del valore
 intero (di tipo \type{int}) \macro{EOF}\footnote{la costante deve essere
   negativa, le \acr{glibc} usano -1, altre implementazioni possono avere
-  valori diversi.}  definito anch'esso nell'header \func{stdlib.h}.
+  valori diversi.}  definito anch'esso nell'header \file{stdlib.h}.
 
 Dato che le funzioni dell'interfaccia degli stream sono funzioni di libreria
 che si appoggiano a delle system call, esse non settano direttamente la
 
 Dato che le funzioni dell'interfaccia degli stream sono funzioni di libreria
 che si appoggiano a delle system call, esse non settano direttamente la
@@ -489,10 +488,10 @@ si avr
 struct histogram {
     int nbins; 
     double max, min;
 struct histogram {
     int nbins; 
     double max, min;
-    double * bin;
+    double *bin;
 } histo; 
 
 } histo; 
 
-int WriteStruct(FILE * stream, struct histogram * histo, size_t nelem) 
+int WriteStruct(FILE *stream, struct histogram *histo, size_t nelem) 
 {
     if ( fwrite(vec, sizeof(*histo), 1, stream) !=1) {
         perror("Write error");
 {
     if ( fwrite(vec, sizeof(*histo), 1, stream) !=1) {
         perror("Write error");
@@ -504,7 +503,7 @@ in cui si specifica la dimensione dell'intera struttura ed un solo
 elemento. 
 
 In realtà quello che conta nel trasferimento dei dati sono le dimensioni
 elemento. 
 
 In realtà quello che conta nel trasferimento dei dati sono le dimensioni
-totali, che sono sempre pari al prodotto \func{size * nelem}; la sola
+totali, che sono sempre pari al prodotto \code{size * nelem}; la sola
 differenza è che le funzioni non ritornano il numero di byte scritti,
 ma il numero di elementi.
 
 differenza è che le funzioni non ritornano il numero di byte scritti,
 ma il numero di elementi.
 
@@ -546,10 +545,9 @@ rileggere i dati tenendo conto delle eventuali differenze.
 Le \acr{glibc} definiscono altre due funzioni per l'I/O binario, che
 evitano il lock implicito dello stream, usato per dalla librerie per la
 gestione delle applicazioni multi-thread (si veda
 Le \acr{glibc} definiscono altre due funzioni per l'I/O binario, che
 evitano il lock implicito dello stream, usato per dalla librerie per la
 gestione delle applicazioni multi-thread (si veda
-\secref{sec:file_stream_thread} per i dettagli).
-
+\secref{sec:file_stream_thread} per i dettagli):
 \begin{functions}
 \begin{functions}
-  \headdecl{stdio.h} 
+  \headdecl{stdio.h}
   
   \funcdecl{size\_t fread\_unlocked(void *ptr, size\_t size, size\_t
     nmemb, FILE *stream)}
   
   \funcdecl{size\_t fread\_unlocked(void *ptr, size\_t size, size\_t
     nmemb, FILE *stream)}
@@ -580,7 +578,7 @@ rispettivi prototipi sono:
   \funcdecl{int fgetc(FILE *stream)} Legge un byte da \param{stream} e lo
   restituisce come intero. È una sempre una funzione.
   
   \funcdecl{int fgetc(FILE *stream)} Legge un byte da \param{stream} e lo
   restituisce come intero. È una sempre una funzione.
   
-  \funcdecl{int getchar(void)} Equivalente a \func{getc(stdin)}.
+  \funcdecl{int getchar(void)} Equivalente a \code{getc(stdin)}.
   
   \bodydesc{Tutte queste funzioni leggono un byte alla volta, che viene
     restituito come intero; in caso di errore o fine del file il valore
   
   \bodydesc{Tutte queste funzioni leggono un byte alla volta, che viene
     restituito come intero; in caso di errore o fine del file il valore
@@ -589,14 +587,14 @@ rispettivi prototipi sono:
 
 A parte \func{getchar}, che si usa in genere per leggere un carattere da
 tastiera, le altre due funzioni sono sostanzialmente equivalenti. La
 
 A parte \func{getchar}, che si usa in genere per leggere un carattere da
 tastiera, le altre due funzioni sono sostanzialmente equivalenti. La
-differenza è che \func{gets} è ottimizzata al massimo e normalmente
+differenza è che \func{getc} è ottimizzata al massimo e normalmente
 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.
 
 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.
 
-Invece \func{fgets} è assicurata essere sempre una funzione, per questo
+Invece \func{fgetc} è assicurata essere sempre una funzione, per questo
 motivo la sua esecuzione normalmente è più lenta per via dell'overhead
 della chiamata, ma è altresì possibile ricavarne l'indirizzo, che può
 essere passato come parametro ad un altra funzione (e non si hanno i
 motivo la sua esecuzione normalmente è più lenta per via dell'overhead
 della chiamata, ma è altresì possibile ricavarne l'indirizzo, che può
 essere passato come parametro ad un altra funzione (e non si hanno i
@@ -621,7 +619,7 @@ byte restituiscono un carattere in formato esteso (cio
   \funcdecl{wint\_t fgetwc(FILE *stream)} Legge un carattere esteso da
   \param{stream} È una sempre una funzione.
   
   \funcdecl{wint\_t fgetwc(FILE *stream)} Legge un carattere esteso da
   \param{stream} È una sempre una funzione.
   
-  \funcdecl{wint\_t getwchar(void)} Equivalente a \func{getwc(stdin)}.
+  \funcdecl{wint\_t getwchar(void)} Equivalente a \code{getwc(stdin)}.
   
   \bodydesc{Tutte queste funzioni leggono un carattere alla volta, in
     caso di errore o fine del file il valore di ritorno è \macro{WEOF}.}
   
   \bodydesc{Tutte queste funzioni leggono un carattere alla volta, in
     caso di errore o fine del file il valore di ritorno è \macro{WEOF}.}
@@ -639,7 +637,7 @@ precedenti usate per leggere: \func{putc}, \func{fputc} e
   \funcdecl{int fputc(FILE *stream)} Scrive il carattere \param{c} su
   \param{stream}. È una sempre una funzione.
   
   \funcdecl{int fputc(FILE *stream)} Scrive il carattere \param{c} su
   \param{stream}. È una sempre una funzione.
   
-  \funcdecl{int putchar(void)} Equivalente a \func{putc(stdin)}.
+  \funcdecl{int putchar(void)} Equivalente a \code{putc(stdin)}.
   
   \bodydesc{Le funzioni scrivono sempre un carattere alla volta, il cui
     valore viene restituito in caso di successo; in caso di errore o
   
   \bodydesc{Le funzioni scrivono sempre un carattere alla volta, il cui
     valore viene restituito in caso di successo; in caso di errore o
@@ -654,7 +652,7 @@ sempre un intero; in caso di errore o fine del file il valore di ritorno
 
 Come nel caso dell'I/O binario le \acr{glibc} provvedono per ciascuna
 delle funzioni precedenti, come estensione GNU, una seconda funzione, il
 
 Come nel caso dell'I/O binario le \acr{glibc} provvedono per ciascuna
 delle funzioni precedenti, come estensione GNU, una seconda funzione, il
-cui nome è ottenuto aggiungendo un \func{\_unlocked}, che esegue
+cui nome è ottenuto aggiungendo un \code{\_unlocked}, che esegue
 esattamente le stesse operazioni evitando però il lock implicito dello
 stream.
 
 esattamente le stesse operazioni evitando però il lock implicito dello
 stream.
 
@@ -745,13 +743,13 @@ prototipi sono:
     di successo o \macro{NULL} in caso di errore.}
 \end{functions}
 
     di successo o \macro{NULL} in caso di errore.}
 \end{functions}
 
-Entrambe le funzioni effettuano la lettura (dal file specificato
-\func{fgets}, dallo standard input \func{gets}) di una linea di
-caratteri (terminata dal carattere \textit{newline}, \verb|\n|), ma
-\func{gets} sostituisce \verb|\n| con uno zero, mentre \func{fgets}
-aggiunge uno zero dopo il \textit{newline}, che resta dentro la
-stringa. Se la lettura incontra la fine del file (o c'è un errore) viene
-restituito un \macro{NULL}, ed il buffer \param{buf} non viene toccato.
+Entrambe le funzioni effettuano la lettura (dal file specificato \func{fgets},
+dallo standard input \func{gets}) di una linea di caratteri (terminata dal
+carattere \textit{newline}, \verb|\n|, quello mappato sul tasto di ritorno a
+capo della tastiera), ma \func{gets} sostituisce \verb|\n| con uno zero,
+mentre \func{fgets} aggiunge uno zero dopo il \textit{newline}, che resta
+dentro la stringa. Se la lettura incontra la fine del file (o c'è un errore)
+viene restituito un \macro{NULL}, ed il buffer \param{buf} non viene toccato.
 
 L'uso di \func{gets} è deprecato e deve essere assolutamente evitato; la
 funzione infatti non controlla il numero di byte letti, per cui nel caso
 
 L'uso di \func{gets} è deprecato e deve essere assolutamente evitato; la
 funzione infatti non controlla il numero di byte letti, per cui nel caso
@@ -794,13 +792,13 @@ rispettivi prototipi sono:
     successo o \macro{EOF} in caso di errore.}
 \end{functions}
 
     successo o \macro{EOF} in caso di errore.}
 \end{functions}
 
-Dato che in questo caso si scrivono i dati in uscita \func{puts} non ha
-i problemi di \func{gets} ed è in genere la forma più immediata per
-scrivere messaggi sullo standard output; la funzione prende una stringa
-terminata da uno zero ed aggiunge automaticamente un newline. La
-differenza con \func{fputs} (a parte la possibilità di specificare un
-file diverso da \var{stdout}) è che quest'ultima non aggiunge il
-newline, che deve essere previsto esplicitamente. 
+Dato che in questo caso si scrivono i dati in uscita \func{puts} non ha i
+problemi di \func{gets} ed è in genere la forma più immediata per scrivere
+messaggi sullo standard output; la funzione prende una stringa terminata da
+uno zero ed aggiunge automaticamente il ritorno a capo. La differenza con
+\func{fputs} (a parte la possibilità di specificare un file diverso da
+\var{stdout}) è che quest'ultima non aggiunge il newline, che deve essere
+previsto esplicitamente.
 
 Come per le funzioni di input/output a caratteri esistono le estensioni
 per leggere e scrivere caratteri estesi, i loro prototipi sono:
 
 Come per le funzioni di input/output a caratteri esistono le estensioni
 per leggere e scrivere caratteri estesi, i loro prototipi sono:
@@ -825,7 +823,7 @@ anzich
 Come nel caso dell'I/O binario e a caratteri nelle \acr{glibc} sono
 previste una serie di altre funzioni, estensione di tutte quelle
 illustrate finora (eccetto \func{gets} e \func{puts}), il cui nome si
 Come nel caso dell'I/O binario e a caratteri nelle \acr{glibc} sono
 previste una serie di altre funzioni, estensione di tutte quelle
 illustrate finora (eccetto \func{gets} e \func{puts}), il cui nome si
-ottiene aggiungendo un \func{\_unlocked}, e che eseguono esattamente le
+ottiene aggiungendo un \code{\_unlocked}, e che eseguono esattamente le
 stesse operazioni delle loro equivalenti, evitando però il lock
 implicito dello stream (vedi \secref{sec:file_stream_thread}).
 
 stesse operazioni delle loro equivalenti, evitando però il lock
 implicito dello stream (vedi \secref{sec:file_stream_thread}).
 
@@ -942,7 +940,7 @@ L'output formattato viene eseguito con una delle 13 funzioni della famiglia
 o quello specificato) la terza permette di stampare su una stringa, in genere
 l'uso di \func{sprintf} è sconsigliato in quanto è possibile, se non si ha la
 sicurezza assoluta sulle dimensioni del risultato della stampa, eccedere le
 o quello specificato) la terza permette di stampare su una stringa, in genere
 l'uso di \func{sprintf} è sconsigliato in quanto è possibile, se non si ha la
 sicurezza assoluta sulle dimensioni del risultato della stampa, eccedere le
-dimensioni di \param{str} con conseguente sovrascrittura di altre varibili e
+dimensioni di \param{str} con conseguente sovrascrittura di altre variabili e
 possibili buffer overflow; per questo motivo si consiglia l'uso
 dell'alternativa:
 \begin{prototype}{stdio.h}
 possibili buffer overflow; per questo motivo si consiglia l'uso
 dell'alternativa:
 \begin{prototype}{stdio.h}
@@ -1010,7 +1008,7 @@ generale essa 
 % [n. parametro $] [flag] [[larghezza] [. precisione]] [tipo] conversione
 \end{verbatim}
 \end{center}
 % [n. parametro $] [flag] [[larghezza] [. precisione]] [tipo] conversione
 \end{verbatim}
 \end{center}
-in cui tutti i valori tranne il \cmd{\%} e lo specificatatore di conversione
+in cui tutti i valori tranne il \cmd{\%} e lo specificatore di conversione
 sono opzionali (e per questo sono indicati fra parentesi quadre); si possono
 usare più elementi opzionali, nel qual caso devono essere specificati in
 questo ordine:
 sono opzionali (e per questo sono indicati fra parentesi quadre); si possono
 usare più elementi opzionali, nel qual caso devono essere specificati in
 questo ordine:
@@ -1056,17 +1054,17 @@ di \func{printf} e nella documentazione delle \acr{glibc}.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \cmd{hh} & una conversione intera corriponde a un \type{char} con o senza
+    \cmd{hh} & una conversione intera corrisponde a un \type{char} con o senza
                segno, o il puntatore per il numero dei parametri \cmd{n} è di 
                tipo \type{char}.\\
                segno, o il puntatore per il numero dei parametri \cmd{n} è di 
                tipo \type{char}.\\
-    \cmd{h}  & una conversione intera corriponde a uno \type{short} con o 
+    \cmd{h}  & una conversione intera corrisponde a uno \type{short} con o 
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
                è di tipo \type{short}.\\
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
                è di tipo \type{short}.\\
-    \cmd{l}  & una conversione intera corriponde a un \type{long} con o 
+    \cmd{l}  & una conversione intera corrisponde a un \type{long} con o 
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
                è di tipo \type{long}, o il carattere o la stringa seguenti
                sono in formato esteso.\\ 
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
                è di tipo \type{long}, o il carattere o la stringa seguenti
                sono in formato esteso.\\ 
-    \cmd{ll} & una conversione intera corriponde a un \type{long long} con o 
+    \cmd{ll} & una conversione intera corrisponde a un \type{long long} con o 
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
                è di tipo \type{long long}.\\
     \cmd{L}  & una conversione in virgola mobile corrisponde a un
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
                è di tipo \type{long long}.\\
     \cmd{L}  & una conversione in virgola mobile corrisponde a un
@@ -1144,15 +1142,15 @@ 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
 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 onoltre ricordarsi di
+allogata automaticamente dalle funzioni. Occorre inoltre ricordarsi di
 invocare \func{free} per liberare detto puntatore quando la stringa non serve
 più, onde evitare memory leak.
 
 Infine una ulteriore estensione GNU definisce le due funzioni \func{dprintf} e
 \func{vdprintf}, che prendono un file descriptor al posto dello stream. Altre
 estensioni permettono di scrivere con caratteri estesi. Anche queste funzioni,
 invocare \func{free} per liberare detto puntatore quando la stringa non serve
 più, onde evitare memory leak.
 
 Infine una ulteriore estensione GNU definisce le due funzioni \func{dprintf} e
 \func{vdprintf}, che prendono un file descriptor al posto dello stream. Altre
 estensioni permettono di scrivere con caratteri estesi. Anche queste funzioni,
-il cui nome è generato dalle precedenti funzioni aggiungendo una \func{w}
-davanti a \func{print}, sono trattate in dettaglio nella documentazione delle
+il cui nome è generato dalle precedenti funzioni aggiungendo una \texttt{w}
+davanti a \texttt{print}, sono trattate in dettaglio nella documentazione delle
 \acr{glibc}.
 
 In corrispondenza alla famiglia di funzioni \func{printf} che si usano per
 \acr{glibc}.
 
 In corrispondenza alla famiglia di funzioni \func{printf} che si usano per
@@ -1207,7 +1205,7 @@ cura nella definizione delle corrette stringhe di formato e sono facilmente
 soggette ad errori, e considerato anche il fatto che è estremamente macchinoso
 recuperare in caso di fallimento nelle corrispondenze, l'input formattato non
 è molto usato. In genere infatti quando si ha a che fare con un input
 soggette ad errori, e considerato anche il fatto che è estremamente macchinoso
 recuperare in caso di fallimento nelle corrispondenze, l'input formattato non
 è molto usato. In genere infatti quando si ha a che fare con un input
-relativamente semplice si preferisce usare l'input di linea ed effetture
+relativamente semplice si preferisce usare l'input di linea ed effettuare
 scansione e conversione di quanto serve direttamente con una delle funzioni di
 conversione delle stringhe; se invece il formato è più complesso diventa più
 facile utilizzare uno strumento come il \cmd{flex} per generare un
 scansione e conversione di quanto serve direttamente con una delle funzioni di
 conversione delle stringhe; se invece il formato è più complesso diventa più
 facile utilizzare uno strumento come il \cmd{flex} per generare un
@@ -1252,8 +1250,8 @@ descriptor, ed i parametri, a parte il tipo, hanno lo stesso significato; in
 particolare \param{whence} assume gli stessi valori già visti in
 \secref{sec:file_lseek}.  La funzione restituisce 0 in caso di successo e -1
 in caso di errore.  La funzione \func{rewind} riporta semplicemente la
 particolare \param{whence} assume gli stessi valori già visti in
 \secref{sec:file_lseek}.  La funzione restituisce 0 in caso di successo e -1
 in caso di errore.  La funzione \func{rewind} riporta semplicemente la
-posizione corrente all'inzio dello stream, ma non esattamente equivalente ad
-una \func{fseek(stream, 0L, SEEK\_SET)} in quanto vengono cancellati anche i
+posizione corrente all'inizio dello stream, ma non esattamente equivalente ad
+una \code{fseek(stream, 0L, SEEK\_SET)} in quanto vengono cancellati anche i
 flag di errore e fine del file.
 
 Per ottenere la posizione corrente si usa invece la funzione \func{ftell}, il
 flag di errore e fine del file.
 
 Per ottenere la posizione corrente si usa invece la funzione \func{ftell}, il
@@ -1278,10 +1276,10 @@ pu
   \headdecl{stdio.h} 
   
   \funcdecl{int fsetpos(FILE *stream, fpos\_t *pos)} Setta la posizione
   \headdecl{stdio.h} 
   
   \funcdecl{int fsetpos(FILE *stream, fpos\_t *pos)} Setta la posizione
-  corrente nello stream \param{stream} al valore specificato da \func{pos}.
+  corrente nello stream \param{stream} al valore specificato da \param{pos}.
   
   \funcdecl{int fgetpos(FILE *stream, fpos\_t *pos)} Scrive la posizione
   
   \funcdecl{int fgetpos(FILE *stream, fpos\_t *pos)} Scrive la posizione
-  corrente nello stream \param{stream} in \func{pos}.
+  corrente nello stream \param{stream} in \param{pos}.
   
   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
     errore.}
   
   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
     errore.}
@@ -1298,7 +1296,8 @@ argomenti di tipo \type{off\_t} anzich
 
 In questa sezione esamineremo alcune funzioni avanzate che permettono di
 eseguire operazioni particolari sugli stream, come leggerne gli attributi,
 
 In questa sezione esamineremo alcune funzioni avanzate che permettono di
 eseguire operazioni particolari sugli stream, come leggerne gli attributi,
-controllarne le modalità di bufferizzazione, ecc.
+controllarne le modalità di bufferizzazione, gestire direttamente i lock
+impliciti per la programmazione multi thread.
 
 
 \subsection{Le funzioni di controllo}
 
 
 \subsection{Le funzioni di controllo}
@@ -1367,8 +1366,8 @@ suo prototipo 
 \begin{prototype}{stdio.h}{int setvbuf(FILE *stream, char *buf, int mode, 
     size\_t size)}
   
 \begin{prototype}{stdio.h}{int setvbuf(FILE *stream, char *buf, int mode, 
     size\_t size)}
   
-  Setta la bufferizzazione dello stream \func{stream} nella modalità indicata
-  da \param{mode}, usando \func{buf} come buffer di lunghezza \param{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.}
   
   \bodydesc{Restituisce zero in caso di successo, ed un valore qualunque in
     caso di errore.}
@@ -1377,7 +1376,7 @@ suo prototipo 
 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
 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
-\func{size}. 
+\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
 
 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
@@ -1410,8 +1409,8 @@ bufferizzata i valori di \param{buf} e \param{size} vengono ignorati.
       \hline
     \end{tabular}
   \label{tab:file_stream_buf_mode}
       \hline
     \end{tabular}
   \label{tab:file_stream_buf_mode}
-  \caption{Valori possibili per il parametro \param{mode} di \func{setvbuf} 
-    nel settaggio delle modalità di bufferizzazione.}
+  \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
 \end{table}
 
 Oltre a \func{setvbuf} le \acr{glibc} definiscono altre tre funzioni per la
@@ -1421,11 +1420,11 @@ e \func{setlinebuf}, i loro prototipi sono:
   \headdecl{stdio.h} 
   
   \funcdecl{void setbuf(FILE *stream, char *buf)} Disabilita la
   \headdecl{stdio.h} 
   
   \funcdecl{void setbuf(FILE *stream, char *buf)} Disabilita la
-  bufferizzazione se \param{buf} è \macro{NULL}, altrimenti usa \func{buf}
+  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
   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 \func{buf}
+  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à
   come buffer di dimensione \param{size} in modalità \textit{fully buffered}.
   
   \funcdecl{void setlinebuf(FILE *stream)} Pone lo stream in modalità
@@ -1495,8 +1494,8 @@ blocco non sono del tutto indolori, e quando il locking dello stream non 
 necessario (come in tutti i programmi che non usano i thread), tutta la
 procedura può comportare dei pesanti costi in termini di prestazioni. Per
 questo motivo abbiamo visto in come per tutte le funzioni di I/O non
 necessario (come in tutti i programmi che non usano i thread), tutta la
 procedura può comportare dei pesanti costi in termini di prestazioni. Per
 questo motivo abbiamo visto in come per tutte le funzioni di I/O non
-formattato esistano delle versioni \func{\_unlocked} (alcune previste dallo
-standard POSIX stesso, altre aggiunte come estenzioni dalle \acr{glibc}) che
+formattato esistano delle versioni \code{\_unlocked} (alcune previste dallo
+standard POSIX stesso, altre aggiunte come estensioni dalle \acr{glibc}) che
 possono essere usate in tutti questi casi\footnote{in certi casi dette
   funzioni possono essere usate, visto che sono molto più efficiente, anche in
   caso di necessità di locking, una volta che questo sia stato acquisito
 possono essere usate in tutti questi casi\footnote{in certi casi dette
   funzioni possono essere usate, visto che sono molto più efficiente, anche in
   caso di necessità di locking, una volta che questo sia stato acquisito
@@ -1504,8 +1503,8 @@ possono essere usate in tutti questi casi\footnote{in certi casi dette
 \func{putc}) queste versioni possono essere realizzate come macro, e sono
 pertanto in grado di garantire prestazione enormemente più elevate.
 
 \func{putc}) queste versioni possono essere realizzate come macro, e sono
 pertanto in grado di garantire prestazione enormemente più elevate.
 
-La sostituizione di tutte le funzioni di I/O con le relative versioni
-\func{\_unlocked} in un programma che non usa i thread è però un lavoro
+La sostituzione di tutte le funzioni di I/O con le relative versioni
+\code{\_unlocked} in un programma che non usa i thread è però un lavoro
 abbastanza noioso, e che appesantisce il codice; per questo motivo le
 \acr{glibc} provvedono un'altra via per poter utilizzare disabilitare il
 locking, anch'essa mutuata da estensioni introdotte in Solaris, cioè l'uso
 abbastanza noioso, e che appesantisce il codice; per questo motivo le
 \acr{glibc} provvedono un'altra via per poter utilizzare disabilitare il
 locking, anch'essa mutuata da estensioni introdotte in Solaris, cioè l'uso
@@ -1528,9 +1527,3 @@ della funzione \func{\_\_fsetlocking}, il cui prototipo 
   di blocco dello stream.
 \end{basedescript}
 
   di blocco dello stream.
 \end{basedescript}
 
-
-\subsection{File temporanei}
-\label{sec:file_temp_file}
-
-Un'altra serie di funzioni definite dalle librerie standard del C sono quelle
-che riguardano la creazione di file temporanei.