\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.
\func{write}) nell'efficienza nelle operazioni di I/O con i file descriptor,
evidenziando come le prestazioni ottimali si ottengano a partire da dimensioni
del buffer dei dati pari a quelle dei blocchi del filesystem (il valore dato
-dal campo \var{st\_blksize} di \var{fstat}).
+dal campo \var{st\_blksize} di \struct{stat}).
Se il programmatore non si cura di effettuare le operazioni in blocchi di
dimensioni adeguate, le prestazioni sono inferiori. La caratteristica
(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}}
\val{NULL} in caso di errore, in tal caso \var{errno} assumerà il valore
ricevuto dalla funzione sottostante di cui è fallita l'esecuzione.
- Gli errori pertanto possono essere quelli di \code{malloc} per tutte
+ Gli errori pertanto possono essere quelli di \func{malloc} per tutte
e tre le funzioni, quelli \func{open} per \func{fopen}, quelli di
\func{fcntl} per \func{fdopen} e quelli di \func{fopen},
\func{fclose} e \func{fflush} per \func{freopen}.}
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]
I nuovi file saranno creati secondo quanto visto in
\secref{sec:file_ownership} ed avranno i permessi di accesso impostati al
valore \code{S\_IRUSR|S\_IWUSR|S\_IRGRP|S\_IWGRP|S\_IROTH|S\_IWOTH} (pari a
-\var{0666}) modificato secondo il valore di \acr{umask} per il processo (si
+\val{0666}) modificato secondo il valore di \acr{umask} per il processo (si
veda \secref{sec:file_umask}).
In caso di file aperti in lettura e scrittura occorre ricordarsi che c'è
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}).}
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
\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}.
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}