Messa ungetc, ripassato ispell
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 16 Dec 2001 10:41:07 +0000 (10:41 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 16 Dec 2001 10:41:07 +0000 (10:41 +0000)
filestd.tex

index 9094ab3c98de33a77d7ea5adc4202020d9923d01..14867d51305f3577f41127638d4698390ee0e167 100644 (file)
@@ -608,7 +608,7 @@ ad \type{int} (si usa \type{unsigned char} in modo da evitare
 l'espansione del segno). In questo modo il valore di ritorno è sempre
 positivo, tranne in caso di errore o fine del file.
 
-Nelle estenzioni GNU che provvedono la localizzazione sono definite tre
+Nelle estensioni GNU che provvedono la localizzazione sono definite tre
 funzioni equivalenti alle precedenti che invece di un carattere di un
 byte restituiscono un carattere in formato esteso (cioè di tipo
 \type{wint\_t}, il loro prototipo è:
@@ -682,15 +682,41 @@ stream senza estrarlo effettivamente (la tecnica 
 dato una \textsl{sbirciatina} a quello che viene dopo. 
 
 Nel nostro caso questo tipo di comportamento può essere realizzato prima
-leggendo il carattere, e poi rimandandolo indietro, cosicchè ridiventi
+leggendo il carattere, e poi rimandandolo indietro, cosicché ridiventi
 disponibile per una lettura successiva; la funzione che inverte la
 lettura si chiama \func{ungetc} ed il suo prototipo è:
 \begin{prototype}{stdio.h}{int ungetc(int c, FILE *stream)}
-  Cancella i flag di errore ed end-of-file di \param{stream}. 
+  Rimanda indietro il carattere \param{c}, con un cast a \type{unsigned
+    char}, sullo stream \param{stream}.
+
+  \bodydesc{La funzione ritorna \param{c} in caso di successo e
+  \macro{EOF} in caso di errore.}
 \end{prototype}
+benché lo standard ANSI C preveda che l'operazione possa essere ripetuta
+per un numero arbitrario di caratteri, alle implementazioni è richiesto
+di garantire solo un livello; questo è quello che fa la \acr{glibc}, che
+richiede che avvenga un'altra operazione fra due \func{ungetc}
+successive.
+
+Non è necessario che il carattere che si manda indietro sia l'ultimo che
+si è letto, e non è necessario neanche avere letto nessun carattere
+prima di usare \func{ungetc}, ma di norma la funzione è intesa per
+essere usata per rimandare indietro l'ultimo carattere letto.
 
+Nel caso \param{c} sia un \macro{EOF} la funzione non fa nulla, e
+restituisce sempre \macro{EOF}; così si può usare \func{ungetc} anche
+con il risultato di una lettura alla fine del file.
 
+Se si è alla fine del file si può comunque rimandare indietro un
+carattere, il flag di end-of-file verrà automaticamente cancellato
+perché c'è un nuovo carattere disponibile che potrà essere riletto
+successivamente.
 
+Infine si tenga presente che \func{ungetc} non altera il contenuto del
+file, ma opera esclusivamente sul buffer interno. Se si esegue una
+qualunque delle operazioni di riposizionamento (vedi
+\secref{sec:file_fseek}) i caratteri rimandati indietro vengono
+scartati.
 
 
 \subsection{Input/output di linea}
@@ -698,10 +724,11 @@ lettura si chiama \func{ungetc} ed il suo prototipo 
 
 La terza ed ultima modalità di input/output non formattato è quello di
 linea, in cui legge o scrive una riga alla volta; questa è una modalità
-molto usata, ma che presenta le caratteristiche più controverse.
+molto usata per l'I/O da terminale, ma che presenta le caratteristiche
+più controverse.
 
-Le funzioni per leggere una linea sono sostazialmente due, \func{gets} e
-\func{fgets}, i rispettivi prototipi sono:
+Le funzioni per leggere una linea sono sostanzialmente due, \func{gets} e
+\func{fgets}, i cui rispettivi prototipi sono:
 \begin{functions}
   \headdecl{stdio.h} 
   
@@ -798,7 +825,7 @@ stream; se non si 
 
 Gli stream possono essere usati in applicazioni multi-thread allo stesso
 modo in cui sono usati nelle applicazioni normali, ma si deve essere
-consapovoli delle possibili complicazioni anche quando non si usano i
+consapevoli delle possibili complicazioni anche quando non si usano i
 thread, dato che l'implementazione delle librerie è influenzata
 pesantemente dalle richieste necessarie per garantirne l'uso coi thread.