From: Simone Piccardi Date: Mon, 17 Dec 2001 19:04:02 +0000 (+0000) Subject: Si comincia con l'input formattato e il posizionamento X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=6b236ee4592f05aabf7dbb4bfcba72d4217052d3;hp=d0822135edba0f7daa5c1edec3f2c9f2fb1b6347 Si comincia con l'input formattato e il posizionamento --- diff --git a/filestd.tex b/filestd.tex index 92ad0a5..c6be8eb 100644 --- a/filestd.tex +++ b/filestd.tex @@ -968,16 +968,21 @@ 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). +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 @@ -987,17 +992,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 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}