Correzioni e tabella operatori di conversione per printf
[gapil.git] / filestd.tex
index 92ad0a562bef15a366b2697065defef102d50fa8..df1b4655337b218f851cd3e9a15b2ffd9beeeb6d 100644 (file)
@@ -951,11 +951,56 @@ consiglia l'uso dell'alternativa:
   \param{size} caratteri.
 \end{prototype}
 
-La parte più complessa di queste funzioni è il formato della variabile
-\param{format} che indica le conversioni da fare ed il numero di
-parametri che dovranno essere specificati a seguire.
-
+La parte più complessa di queste funzioni è il formato della stringa
+\param{format} che indica le conversioni da fare, da cui poi deriva il numero
+dei parametri che dovranno essere passati a seguire. La stringa è costituita
+da caratteri normali (tutti eccetto \texttt{\%}), che vengono passati
+invariati all'output, e da direttive di conversione, il cui formato è sempre
+del tipo:
+\begin{center}
+\begin{verbatim}
+% [n. parametro $] [flag] [larghezza] [. precisione] [tipo] conversione
+\end{verbatim}
+\end{center}
+in cui devono essere sempre presenti il carattere \texttt{\%}, che introduce
+la direttiva, ed uno degli specificatori di conversione (riportatati in \ntab)
+che la conclude; gli altri valori, indicati fra parentesi, sono opzionali.
 
+\begin{table}[htb]
+  \centering
+  \begin{tabular}[c]{|l|p{10cm}|}
+    \hline
+    \textbf{Valore} & \textbf{Significato} \\
+    \hline
+    \hline
+   \cmd{\%d}            & Stampa un numero intero in formato decimale 
+                          con segno\\
+   \cmd{\%i}            & Identico a \cmd{\%i} in output, \\
+   \cmd{\%o}            & Stampa un numero intero come ottale\\
+   \cmd{\%u}            & Stampa un numero intero in formato decimale senza
+                          segno \\
+   \cmd{\%x}, \cmd{\%X} & Stampano un intero in formato esadecimale,
+                          rispettivamente con lettere minuscole e maiuscole. \\
+   \cmd{\%f}            & Stampa un numero in virgola mobile con la notazione
+                          a virgola fissa \\
+   \cmd{\%e}, \cmd{\%E} & Stampano un numero in virgola mobile con la notazione
+                          esponenziale, rispettivamente con lettere minuscole 
+                          e maiuscole. \\
+   \cmd{\%g}, \cmd{\%G} & Stampano un numero in virgola mobile con la notazione
+                          più appropriate delle due precedenti,
+                          rispettivamente con lettere minuscole e maiuscole. \\
+   \cmd{\%a}, \cmd{\%A} & Stampano un numero in virgola mobile in notazione 
+                          esadecimale frazionaria\\
+   \cmd{\%c}            & Stampa un carattere singolo\\
+   \cmd{\%s}            & Stampa una stringa \\
+   \cmd{\%p}            & Stampa il valore di un puntatore\\
+   \cmd{\%n}            & Prende il numero di caratteri stampati finora\\
+    \hline
+  \end{tabular}
+  \caption{Valori possibili per gli specificatori di conversione in una
+    stringa di formato per l'output.} 
+  \label{tab:file_format_spec}
+\end{table}
 
 
 
@@ -968,18 +1013,23 @@ parametri che dovranno essere specificati a seguire.
 \subsection{Posizionamento su uno stream}
 \label{sec:file_fseek}
 
-Come per i file descriptor è possibile spostarsi all'interno del file
-anche con gli stream. In GNU/Linux ed in generale in ogni sistema
-unix-like la posizione nel file è espressa da un intero positivo,
-rappresentato dal tipo \type{off\_t}, il problema è alcune delle funzioni
-usate per il riposizionamento sugli stream (come \func{ftell} e
-\func{fseek}) originano dalle prime versioni di unix in cui questo tipo
-non era ancora stato definito, e che in altri sistemi non è detto che la
-posizione su un file venga sempre rappresentata con un numero di
-caratteri (ad esempio in VMS può essere rappresentata come numero di
-record, e offset rispetto al record corrente).
-
-Tutto questo comporta la presenza di diverse funzioni che seguono
+Come per i file descriptor è possibile anche con gli stream spostarsi
+all'interno di un file per effettuare operazioni di lettura o scrittura
+in un punto prestabilito; questo fintanto che l'operazione di
+riposizionamento è supportata dal file sottostante lo stream, quando
+cioè si ha a che fare con quelio che viene detto un file ad
+\textsl{accesso casuale}.
+
+In GNU/Linux ed in generale in ogni sistema unix-like la posizione nel
+file è espressa da un intero positivo, rappresentato dal tipo
+\type{off\_t}, il problema è alcune delle funzioni usate per il
+riposizionamento sugli stream originano dalle prime versioni di unix in
+cui questo tipo non era ancora stato definito, e che in altri sistemi
+non è detto che la posizione su un file venga sempre rappresentata con
+un numero di caratteri (ad esempio in VMS può essere rappresentata come
+numero di record, e offset rispetto al record corrente).
+
+Tutto questo comporta la presenza di diverse funzioni che eseguono
 sostanzialmente le stesse operazioni, ma usano parametri di tipo
 diverso. Le funzioni tradizionali usate per il riposizionamento della
 posizione in uno stream sono:
@@ -987,17 +1037,31 @@ posizione in uno stream sono:
   \headdecl{stdio.h} 
   
   \funcdecl{int fseek(FILE *stream, long offset, int whence)} Sposta la
-  posizione nello stream secondo quanto specicato tramite \param{offset}
+  posizione nello stream secondo quanto specificato tramite \param{offset}
   e \param{whence}.  
 
-  \funcdecl{long ftell(FILE *stream)} Legge la posizione attuale nello stream.
-  
   \funcdecl{void rewind(FILE *stream)} Riporta la posizione nello stream
   all'inizio del file.
 \end{functions}
 
+L'uso di \func{fseek} è del tutto analogo a quello di \func{lseek} per i
+file 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. 
 
+Per leggere la posizione corrente si usa invece la funzione \func{ftell}, il
+cui prototipo è:
+\begin{prototype}{stdio.h}{long ftell(FILE *stream)} 
+  Legge la posizione attuale nello stream.
+  
+  \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}}
+\end{prototype}
 
+  
 
 
 \section{Funzioni avanzate}