X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filestd.tex;h=1dd23d93b561c0ec5ca929c8a2982313cfc58aad;hp=670e55b28db3a1709d4652d863b41a147dfc3e30;hb=25de957ddf731370bec1eb74b13cf35aa7886d1b;hpb=5a59e67204ff436dceb6a13ed39e876aea3945a8 diff --git a/filestd.tex b/filestd.tex index 670e55b..1dd23d9 100644 --- a/filestd.tex +++ b/filestd.tex @@ -36,6 +36,7 @@ costituire il nucleo\footnote{queste funzioni sono state implementate la prima \subsection{I \textit{file stream}} \label{sec:file_stream} +\index{file!stream|(} Come più volte ribadito, l'interfaccia dei file descriptor è un'interfaccia di basso livello, che non provvede nessuna forma di formattazione dei dati e nessuna forma di bufferizzazione per ottimizzare le operazioni di I/O. @@ -67,6 +68,7 @@ formattazioni), i file stream restano del tutto equivalenti ai file descriptor (sui quali sono basati), ed in particolare continua a valere quanto visto in \secref{sec:file_sharing} a proposito dell'accesso condiviso ed in \secref{sec:file_access_control} per il controllo di accesso. +\index{file!stream|)} \subsection{Gli oggetti \ctyp{FILE}} @@ -252,9 +254,9 @@ associato a \param{stream} e se questo preventivamente chiuso. Infine \func{fdopen} viene usata per associare uno stream ad un file -descriptor esistente ottenuto tramite una altra funzione (ad esempio con -una \func{open}, una \func{dup}, o una \func{pipe}) e serve quando si -vogliono usare gli stream con file come le fifo o i socket, che non +descriptor esistente ottenuto tramite una altra funzione (ad esempio con una +\func{open}, una \func{dup}, o una \func{pipe}) e serve quando si vogliono +usare gli stream con file come le fifo o i socket\index{socket}, che non possono essere aperti con le funzioni delle librerie standard del C. \begin{table}[htb] @@ -351,7 +353,7 @@ Uno stream viene chiuso con la funzione \func{fclose} il cui prototipo Chiude lo stream \param{stream}. \bodydesc{Restituisce 0 in caso di successo e \val{EOF} in caso di errore, - nel qual caso imposta \var{errno} a \const{EBADF} se il file descriptor + nel qual caso imposta \var{errno} a \errval{EBADF} se il file descriptor indicato da \param{stream} non è valido, o uno dei valori specificati dalla sottostante funzione che è fallita (\func{close}, \func{write} o \func{fflush}).} @@ -366,7 +368,7 @@ una \func{sync} (vedi \secref{sec:file_sync}). Linux supporta anche una altra funzione, \func{fcloseall}, come estensione GNU implementata dalle \acr{glibc}, accessibile avendo definito -\const{\_GNU\_SOURCE}, il suo prototipo è: +\macro{\_GNU\_SOURCE}, il suo prototipo è: \begin{prototype}{stdio.h}{int fcloseall(void)} Chiude tutti gli stream. @@ -856,7 +858,7 @@ che eccede le dimensioni del buffer. Per questo motivo le \acr{glibc} prevedono, come estensione GNU, due nuove funzioni per la gestione dell'input/output di linea, il cui uso permette di risolvere questi problemi. L'uso di queste funzioni deve -essere attivato definendo la macro \const{\_GNU\_SOURCE} prima di +essere attivato definendo la macro \macro{\_GNU\_SOURCE} prima di includere \file{stdio.h}. La prima delle due, \func{getline}, serve per leggere una linea terminata da un newline esattamente allo stesso modo di \func{fgets}, il suo prototipo è: @@ -1140,7 +1142,7 @@ scritti sulla stringa di destinazione: Per eliminare alla radice questi problemi, le \acr{glibc} supportano una specifica estensione GNU che alloca dinamicamente tutto lo spazio necessario; -l'estensione si attiva al solito definendo \const{\_GNU\_SOURCE}, le due +l'estensione si attiva al solito definendo \macro{\_GNU\_SOURCE}, le due funzioni sono: \begin{functions} \headdecl{stdio.h} @@ -1243,8 +1245,9 @@ all'interno di un file per effettuare operazioni di lettura o scrittura in un punto prestabilito; sempre che l'operazione di riposizionamento sia supportata dal file sottostante lo stream, quando cioè si ha a che fare con quello che viene detto un file ad \textsl{accesso casuale}.\footnote{dato che in un - sistema Unix esistono vari tipi di file, come le fifo ed i dispositivi, non - è scontato che questo sia sempre vero.} + sistema Unix esistono vari tipi di file, come le fifo ed i file di + dispositivo\index{file!di dispositivo}, non è scontato che questo sia sempre + vero.} 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 @@ -1339,7 +1342,7 @@ il prototipo della funzione \bodydesc{Restituisce il numero del file descriptor in caso di successo, e -1 qualora \param{stream} non sia valido, nel qual caso imposta - \var{errno} a \const{EBADF}.} + \var{errno} a \errval{EBADF}.} \end{prototype} \noindent ed in questo modo diventa possibile usare direttamente \func{fcntl}. @@ -1504,13 +1507,13 @@ scelta, si pu Forza la scrittura di tutti i dati bufferizzati dello stream \param{stream}. \bodydesc{Restituisce zero in caso di successo, ed \val{EOF} in caso di - errore, impostando \var{errno} a \const{EBADF} se \param{stream} non è + errore, impostando \var{errno} a \errval{EBADF} se \param{stream} non è aperto o non è aperto in scrittura, o ad uno degli errori di \func{write}.} \end{prototype} \noindent anche di questa funzione esiste una analoga -\func{fflush\_unlocked}\footnote{accessibile definendo \const{\_BSD\_SOURCE} o - \const{\_SVID\_SOURCE} o \const{\_GNU\_SOURCE}.} che non effettua il blocco +\func{fflush\_unlocked}\footnote{accessibile definendo \macro{\_BSD\_SOURCE} o + \macro{\_SVID\_SOURCE} o \macro{\_GNU\_SOURCE}.} che non effettua il blocco dello stream. Se \param{stream} è \val{NULL} lo scarico dei dati è forzato per tutti gli @@ -1565,7 +1568,7 @@ Ci sono comunque situazioni in cui questo non basta, come quando un thread necessita di compiere più di una operazione sullo stream atomicamente, per questo motivo le librerie provvedono anche delle funzioni che permettono la gestione esplicita dei blocchi sugli stream; queste funzioni sono disponibili -definendo \const{\_POSIX\_THREAD\_SAFE\_FUNCTIONS} ed i loro prototipi sono: +definendo \macro{\_POSIX\_THREAD\_SAFE\_FUNCTIONS} ed i loro prototipi sono: \begin{functions} \headdecl{stdio.h}