\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).
+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 seguono
sostanzialmente le stesse operazioni, ma usano parametri di tipo
\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 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}