Correzione ai limiti, aggiustate referenze e iniziato le funzioni per
[gapil.git] / filestd.tex
index aa4d1ccfa3e1475b45e4fd019cca5e5acad96e7d..5f51dad5aed2c6f96fe50f589c1b78ce99374cee 100644 (file)
@@ -59,17 +59,17 @@ formattazioni), i file stream restano del tutto equivalenti ai file descriptor
 \secref{sec:file_access_control} per il controllo di accesso.
 
 
-\subsection{Gli oggetti \type{FILE}}
+\subsection{Gli oggetti \ctyp{FILE}}
 \label{sec:file_FILE}
 
 Per ragioni storiche la struttura di dati che rappresenta uno stream è stata
-chiamata \type{FILE}, questi oggetti sono creati dalle funzioni di libreria e
+chiamata \ctyp{FILE}, questi oggetti sono creati dalle funzioni di libreria e
 contengono tutte le informazioni necessarie a gestire le operazioni sugli
 stream, come la posizione corrente, lo stato del buffer e degli indicatori di
 stato e di fine del file.
 
 Per questo motivo gli utenti non devono mai utilizzare direttamente o
-allocare queste strutture, ma usare sempre puntatori del tipo \type{FILE
+allocare queste strutture, ma usare sempre puntatori del tipo \ctyp{FILE
   *} ottenuti dalla libreria stessa (tanto che in certi casi il termine
 di puntatore a file è diventato sinonimo di stream).  Tutte le funzioni
 della libreria che operano sui file accettano come parametri solo
@@ -102,7 +102,7 @@ definiti nell'header \file{stdio.h} che sono:
 \end{basedescript}
 
 Nelle \acr{glibc} \var{stdin}, \var{stdout} e \var{stderr} sono
-effettivamente tre variabili di tipo \type{FILE *} che possono essere
+effettivamente tre variabili di tipo \ctyp{FILE *} che possono essere
 usate come tutte le altre, ad esempio si può effettuare una redirezione
 dell'output di un programma con il semplice codice:
 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
@@ -396,7 +396,7 @@ A differenza dell'interfaccia dei file descriptor, con gli stream il
 raggiungimento della fine del file è considerato un errore, e viene
 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
+intero (di tipo \ctyp{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 \file{stdlib.h}.
 
@@ -414,7 +414,7 @@ funzionamento di \var{errno}).
 
 Per questo motivo tutte le implementazioni delle librerie standard
 mantengono per ogni stream almeno due flag all'interno dell'oggetto
-\type{FILE}, il flag di \textit{end-of-file}, che segnala che si è
+\ctyp{FILE}, il flag di \textit{end-of-file}, che segnala che si è
 raggiunta la fine del file in lettura, e quello di errore, che segnala
 la presenza di un qualche errore nelle operazioni di input/output;
 questi due flag possono essere riletti dalle funzioni:
@@ -474,7 +474,7 @@ In genere si usano queste funzioni quando si devono trasferire su file
 blocchi di dati binari in maniera compatta e veloce; un primo caso di uso
 tipico è quello in cui si salva un vettore (o un certo numero dei suoi
 elementi) con una chiamata del tipo:
-\footnotesize
+%\footnotesize
 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
 int WriteVect(FILE *stream, double *vec, size_t nelem) 
 {
@@ -486,12 +486,12 @@ int WriteVect(FILE *stream, double *vec, size_t nelem)
     return nread;
 }
 \end{lstlisting}
-\normalsize
+%\normalsize
 in questo caso devono essere specificate le dimensioni di ciascun
 elemento ed il numero di quelli che si vogliono scrivere. Un secondo
 caso è invece quello in cui si vuole trasferire su file una struttura;
 si avrà allora una chiamata tipo:
-\footnotesize
+%\footnotesize
 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
 struct histogram {
     int nbins; 
@@ -507,7 +507,7 @@ int WriteStruct(FILE *stream, struct histogram *histo, size_t nelem)
     return nread;
 }
 \end{lstlisting}
-\normalsize
+%\normalsize
 in cui si specifica la dimensione dell'intera struttura ed un solo
 elemento. 
 
@@ -609,15 +609,15 @@ della chiamata, ma 
 essere passato come parametro ad un altra funzione (e non si hanno i
 problemi accennati in precedenza con \param{stream}).
 
-Le tre funzioni restituiscono tutte un \type{unsigned char} convertito
-ad \type{int} (si usa \type{unsigned char} in modo da evitare
+Le tre funzioni restituiscono tutte un \ctyp{unsigned char} convertito
+ad \ctyp{int} (si usa \ctyp{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 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 è:
+\ctyp{wint\_t}, il loro prototipo è:
 \begin{functions}
   \headdecl{stdio.h} 
   \headdecl{wchar.h} 
@@ -654,8 +654,8 @@ precedenti usate per leggere: \func{putc}, \func{fputc} e
 \end{functions}
 
 Tutte queste funzioni scrivono sempre un byte alla volta, anche se
-prendono come parametro un \type{int} (che pertanto deve essere ottenuto
-con un cast da un \type{unsigned char}). Anche il valore di ritorno è
+prendono come parametro un \ctyp{int} (che pertanto deve essere ottenuto
+con un cast da un \ctyp{unsigned char}). Anche il valore di ritorno è
 sempre un intero; in caso di errore o fine del file il valore di ritorno
 è \macro{EOF}.
 
@@ -666,7 +666,7 @@ esattamente le stesse operazioni evitando per
 stream.
 
 Per compatibilità con SVID sono provviste anche due funzioni per leggere
-e scrivere una \textit{word} (che è sempre definita come \type{int}); i
+e scrivere una \textit{word} (che è sempre definita come \ctyp{int}); i
 loro prototipi sono:
 \begin{functions}
   \headdecl{stdio.h} 
@@ -694,7 +694,7 @@ leggendo il carattere, e poi rimandandolo indietro, cosicch
 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)}
-  Rimanda indietro il carattere \param{c}, con un cast a \type{unsigned
+  Rimanda indietro il carattere \param{c}, con un cast a \ctyp{unsigned
     char}, sullo stream \param{stream}.
 
   \bodydesc{La funzione ritorna \param{c} in caso di successo e
@@ -969,34 +969,34 @@ dei parametri che dovranno essere passati a seguire.
     \textbf{Valore} & \textbf{Tipo} & \textbf{Significato} \\
     \hline
     \hline
-   \cmd{\%d} &\type{int}         & Stampa un numero intero in formato decimale
+   \cmd{\%d} &\ctyp{int}         & Stampa un numero intero in formato decimale
                                    con segno \\
-   \cmd{\%i} &\type{int}         & Identico a \cmd{\%i} in output, \\
-   \cmd{\%o} &\type{unsigned int}& Stampa un numero intero come ottale\\
-   \cmd{\%u} &\type{unsigned int}& Stampa un numero intero in formato
+   \cmd{\%i} &\ctyp{int}         & Identico a \cmd{\%i} in output, \\
+   \cmd{\%o} &\ctyp{unsigned int}& Stampa un numero intero come ottale\\
+   \cmd{\%u} &\ctyp{unsigned int}& Stampa un numero intero in formato
                                    decimale senza segno \\
    \cmd{\%x}, 
-   \cmd{\%X} &\type{unsigned int}& Stampano un intero in formato esadecimale,
+   \cmd{\%X} &\ctyp{unsigned int}& Stampano un intero in formato esadecimale,
                                    rispettivamente con lettere minuscole e
                                    maiuscole. \\
-   \cmd{\%f} &\type{unsigned int}& Stampa un numero in virgola mobile con la
+   \cmd{\%f} &\ctyp{unsigned int}& Stampa un numero in virgola mobile con la
                                    notazione a virgola fissa \\
    \cmd{\%e}, 
-   \cmd{\%E} &\type{double} & Stampano un numero in virgola mobile con la
+   \cmd{\%E} &\ctyp{double} & Stampano un numero in virgola mobile con la
                               notazione esponenziale, rispettivamente con
                               lettere minuscole e maiuscole. \\
    \cmd{\%g}, 
-   \cmd{\%G} &\type{double} & Stampano un numero in virgola mobile con la
+   \cmd{\%G} &\ctyp{double} & Stampano un numero in virgola mobile con la
                               notazione più appropriate delle due precedenti,
                               rispettivamente con lettere minuscole e
                               maiuscole. \\
    \cmd{\%a}, 
-   \cmd{\%A} &\type{double} & Stampano un numero in virgola mobile in
+   \cmd{\%A} &\ctyp{double} & Stampano un numero in virgola mobile in
                               notazione esadecimale frazionaria\\
-   \cmd{\%c} &\type{int}    & Stampa un carattere singolo\\
-   \cmd{\%s} &\type{char *} & Stampa una stringa \\
-   \cmd{\%p} &\type{void *} & Stampa il valore di un puntatore\\
-   \cmd{\%n} &\type{\&int}  & Prende il numero di caratteri stampati finora\\
+   \cmd{\%c} &\ctyp{int}    & Stampa un carattere singolo\\
+   \cmd{\%s} &\ctyp{char *} & Stampa una stringa \\
+   \cmd{\%p} &\ctyp{void *} & Stampa il valore di un puntatore\\
+   \cmd{\%n} &\ctyp{\&int}  & Prende il numero di caratteri stampati finora\\
    \cmd{\%\%}&              & Stampa un \% \\
     \hline
   \end{tabular}
@@ -1067,21 +1067,21 @@ di \func{printf} e nella documentazione delle \acr{glibc}.
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \cmd{hh} & una conversione intera corrisponde a un \type{char} con o senza
+    \cmd{hh} & una conversione intera corrisponde a un \ctyp{char} con o senza
                segno, o il puntatore per il numero dei parametri \cmd{n} è di 
-               tipo \type{char}.\\
-    \cmd{h}  & una conversione intera corrisponde a uno \type{short} con o 
+               tipo \ctyp{char}.\\
+    \cmd{h}  & una conversione intera corrisponde a uno \ctyp{short} con o 
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
-               è di tipo \type{short}.\\
-    \cmd{l}  & una conversione intera corrisponde a un \type{long} con o 
+               è di tipo \ctyp{short}.\\
+    \cmd{l}  & una conversione intera corrisponde a un \ctyp{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
+               è di tipo \ctyp{long}, o il carattere o la stringa seguenti
                sono in formato esteso.\\ 
-    \cmd{ll} & una conversione intera corrisponde a un \type{long long} con o 
+    \cmd{ll} & una conversione intera corrisponde a un \ctyp{long long} con o 
                senza segno, o il puntatore per il numero dei parametri \cmd{n}
-               è di tipo \type{long long}.\\
+               è di tipo \ctyp{long long}.\\
     \cmd{L}  & una conversione in virgola mobile corrisponde a un
-               \type{double}.\\
+               \ctyp{double}.\\
     \cmd{q}  & sinonimo di \cmd{ll}.\\
     \cmd{j}  & una conversione intera corrisponde a un \type{intmax\_t} o 
                \type{uintmax\_t}.\\
@@ -1275,7 +1275,7 @@ cui prototipo 
   \bodydesc{La funzione restituisce la posizione corrente, o -1 in caso
     di fallimento, che può esser dovuto sia al fatto che il file non
     supporta il riposizionamento che al fatto che la posizione non può
-    essere espressa con un \type{long int}}
+    essere espressa con un \ctyp{long int}}
 \end{prototype}
 \noindent la funzione restituisce la posizione come numero di byte
 dall'inizio dello stream. 
@@ -1301,7 +1301,7 @@ pu
 In Linux, a partire dalle glibc 2.1, sono presenti anche le due funzioni
 \func{fseeko} e \func{ftello}, che assolutamente identiche alle precedenti
 \func{fseek} e \func{ftell} ma hanno argomenti di tipo \type{off\_t} anziché
-di tipo \type{long int}.
+di tipo \ctyp{long int}.