ancora sui flag
[gapil.git] / fileio.tex
1 %% fileio.tex (merge fileunix.tex - filestd.tex)
2 %%
3 %% Copyright (C) 2000-2012 Simone Piccardi.  Permission is granted to
4 %% copy, distribute and/or modify this document under the terms of the GNU Free
5 %% Documentation License, Version 1.1 or any later version published by the
6 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
7 %% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
8 %% license is included in the section entitled "GNU Free Documentation
9 %% License".
10 %%
11
12 \chapter{La gestione dell'I/O su file}
13 \label{cha:file_IO_interface}
14
15
16 Esamineremo in questo capitolo le due interfacce di programmazione che
17 consentono di gestire i dati mantenuti nei file. Cominceremo con quella nativa
18 del sistema, detta dei \itindex{file~descriptor} \textit{file descriptor}, che
19 viene fornita direttamente dalle \textit{system call} e che non prevede
20 funzionalità evolute come la bufferizzazione o funzioni di lettura o scrittura
21 formattata. Esamineremo poi anche l'interfaccia definita dallo standard ANSI
22 C, che viene chiamata dei \textit{file stream} o anche più brevemente degli
23 \textit{stream}. Per entrambe dopo una introduzione alle caratteristiche
24 generali tratteremo le funzioni base per la gestione dell'I/O, lasciando per
25 ultime le caratteristiche più avanzate.
26
27
28 \section{L'interfaccia dei \textit{file descriptor}}
29 \label{sec:file_unix_interface}
30
31
32 Come visto in sez.~\ref{sec:file_vfs_work} il kernel mette a disposione
33 tramite il \itindex{Virtual~File~System} \textit{Virtual File System} una
34 serie di \textit{system call} che consentono di operare sui file in maniera
35 generale. Abbiamo trattato quelle relative alla gestione delle proprietà dei
36 file nel precedente capitolo, vedremo quelle che si applicano al contenuto dei
37 file in questa sezione, iniziando con una breve introduzione sull'architettura
38 dei \textit{file descriptor} per poi trattare le funzioni di base e le
39 modalità con cui consentono di gestire i dati memorizzati sui file.
40
41
42 \subsection{I \textit{file descriptor}}
43 \label{sec:file_fd}
44
45 \itindbeg{file~descriptor} 
46
47 L'accesso al contenuto dei file viene effettuato, sia pure con differenze
48 nella realizzazione pratica, in maniera sostanzialmente identica in tutte le
49 implementazioni di un sistema unix-like, ricorrendo a quella che viene
50 chiamata l'interfaccia dei \textit{file descriptor}.
51
52 Per poter accedere al contenuto di un file occorre creare un canale di
53 comunicazione con il kernel che renda possibile operare su di esso. Questo si
54 fa aprendo il file con la funzione \func{open} (vedi sez.~\ref{sec:file_open})
55 che provvederà a localizzare \itindex{inode} l'inode del file e inizializzare
56 i puntatori che rendono disponibili le funzioni che il
57 \itindex{Virtual~File~System} VFS mette a disposizione (quelle di
58 tab.~\ref{tab:file_file_operations}). Una volta terminate le operazioni, il
59 file dovrà essere chiuso, e questo chiuderà il canale di comunicazione
60 impedendo ogni ulteriore operazione.
61
62 All'interno di ogni processo i file aperti sono identificati da un numero
63 intero non negativo, che viene chiamato \textit{file descriptor}.  Quando un
64 file viene aperto la funzione \func{open} restituisce questo numero, tutte le
65 ulteriori operazioni dovranno essere compiute specificando questo stesso
66 numero come argomento alle varie funzioni dell'interfaccia.
67
68 Per capire come funziona il meccanismo occorre spiegare a grandi linee come il
69 kernel gestisce l'interazione fra processi e file.  Abbiamo già accennato in
70 sez.~\ref{sec:proc_hierarchy} come il kernel mantenga un elenco di tutti
71 processi nella cosiddetta \itindex{process~table} \textit{process table}. Lo
72 stesso, come accennato in sez.~\ref{sec:file_vfs_work}, vale anche per tutti i
73 file aperti, il cui elenco viene mantenuto nella cosiddetta
74 \itindex{file~table} \textit{file table}.
75
76 La \itindex{process~table} \textit{process table} è una tabella che contiene
77 una voce per ciascun processo attivo nel sistema. Ciascuna voce è costituita
78 dal puntatore a una struttura di tipo \kstruct{task\_struct} nella quale sono
79 raccolte tutte le informazioni relative al processo, fra queste informazioni
80 c'è anche il puntatore ad una ulteriore struttura di tipo
81 \kstruct{files\_struct},\footnote{la definizione corrente di questa struttura
82   si trova nel file \texttt{include/linux/fdtable.h} dei sorgenti del kernel,
83   quella mostrata in fig.~\ref{fig:file_proc_file} è una versione pesantemente
84   semplificata.} che contiene le informazioni relative ai file che il processo
85 ha aperto.
86
87 La \itindex{file~table} \textit{file table} è una tabella che contiene una
88 voce per ciascun file che è stato aperto nel sistema. Come accennato in
89 sez.~\ref{sec:file_vfs_work} per ogni file aperto viene allocata una struttura
90 \kstruct{file} e la \textit{file table} è costituita da un elenco di puntatori
91 a ciascuna di queste strutture, che, come illustrato in
92 fig.~\ref{fig:kstruct_file}, contengono le informazioni necessarie per la
93 gestione dei file, ed in particolare:
94 \begin{itemize*}
95 \item il flag di stato \itindex{file~status~flag} del file nel campo
96   \var{f\_flags}.
97 \item la posizione corrente nel file, il cosiddetto \textit{offset}, nel campo
98   \var{f\_pos}.
99 \item un puntatore alla struttura \kstruct{inode} che identifica
100   \itindex{inode} l'\textit{inode} del file.\footnote{nel kernel 2.4.x si è in
101     realtà passati ad un puntatore ad una struttura \kstruct{dentry} che punta
102     a sua volta \itindex{inode} all'\textit{inode} passando per la nuova
103     struttura del VFS.}
104 \item un puntatore \var{f\_op} alla tabella delle funzioni che si possono
105   usare sul file.\footnote{quelle della struttura \kstruct{file\_operation},
106     descritte sommariamente in tab.~\ref{tab:file_file_operations}.}
107 \end{itemize*}
108
109 \begin{figure}[!htb]
110   \centering
111   \includegraphics[width=12cm]{img/procfile}
112   \caption{Schema della architettura dell'accesso ai file attraverso
113   l'interfaccia dei \textit{file descriptor}.}
114   \label{fig:file_proc_file}
115 \end{figure}
116
117 In fig.~\ref{fig:file_proc_file} si è riportato uno schema semplificato in cui
118 è illustrata questa architettura, ed in cui si sono evidenziate le
119 interrelazioni fra la \itindex{file~table} \textit{file table}, la
120 \itindex{process~table} \textit{process table} e le varie strutture di dati
121 che il kernel mantiene per ciascun file e ciascun processo.
122
123 Come si può notare alla fine il collegamento che consente di porre in
124 relazione i file ed i processi è effettuato attraverso i dati mantenuti nella
125 struttura \kstruct{files\_struct}, essa infatti contiene alcune informazioni
126 essenziali come:
127 \begin{itemize*}
128 \item i flag relativi ai file aperti dal processo.
129 \item il numero di file aperti dal processo.
130 \item una tabella di puntatori alla relativa voce nella \itindex{file~table}
131   \textit{file table} per ciascun file aperto.
132 \end{itemize*}
133
134 In questa infrastruttura un \textit{file descriptor} non è altro che l'intero
135 positivo che indicizza quest'ultima tabella, grazie al quale si può recuperare
136 il puntatore alla struttura \kstruct{file} nella \itindex{file~table}
137 \textit{file table} corrispondente al file che è stato aperto dal processo e a
138 cui era stato assegnato questo indice. Ma una volta indicato col \textit{file
139   descriptor} qual'è la struttura \kstruct{file} nella \textit{file table}
140 corrispondente al file voluto, il kernel potrà usare le funzioni messe
141 disposizione dal VFS per eseguire sul file tutte le operazioni necessarie.
142
143 Il meccanismo dell'apertura dei file prevede che venga sempre fornito il primo
144 \textit{file descriptor} libero nella tabella, e per questo motivo essi
145 vengono assegnati in successione tutte le volte che si apre un nuovo file,
146 posto che non ne sia stato chiuso nessuno in precedenza.
147
148 In tutti i sistemi unix-like esiste poi una convenzione generale per cui ogni
149 processo viene lanciato dalla shell con almeno tre file aperti. Questi, per
150 quanto appena detto, avranno come \itindex{file~descriptor} \textit{file
151   descriptor} i valori 0, 1 e 2.  Benché questa sia soltanto una convenzione,
152 essa è seguita dalla gran parte delle applicazioni, e non aderirvi potrebbe
153 portare a gravi problemi di interoperabilità.
154
155 Il primo file è sempre associato al cosiddetto \itindex{standard~input}
156 \textit{standard input}, è cioè il file da cui un processo si aspetta di dover
157 leggere i dati in ingresso. Il secondo file è il cosiddetto
158 \itindex{standard~output} \textit{standard output}, cioè quello su cui ci si
159 aspetta di dover scrivere i dati in uscita. Il terzo è lo
160 \itindex{standard~error} \textit{standard error}, su cui vengono scritti i
161 dati relativi agli errori.  Nel caso della shell tutti questi file sono
162 associati al terminale di controllo, e corrispondono quindi alla lettura della
163 tastiera per l'ingresso e alla scrittura sul terminale per l'uscita.  Lo
164 standard POSIX.1 provvede, al posto dei valori numerici, tre costanti
165 simboliche, definite in tab.~\ref{tab:file_std_files}.
166
167 \begin{table}[htb]
168   \centering
169   \footnotesize
170   \begin{tabular}[c]{|l|l|}
171     \hline
172     \textbf{File} & \textbf{Significato} \\
173     \hline
174     \hline
175     \const{STDIN\_FILENO}  & \textit{file descriptor} dello \textit{standard
176       input} \\
177     \const{STDOUT\_FILENO} & \textit{file descriptor} dello \textit{standard
178       output} \\
179     \const{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard
180       error}\\
181     \hline
182   \end{tabular}
183   \caption{Costanti definite in \headfile{unistd.h} per i file standard aperti 
184     alla creazione di ogni processo.}
185   \label{tab:file_std_files}
186 \end{table}
187
188 In fig.~\ref{fig:file_proc_file} si è rappresentata una situazione diversa
189 rispetto a quella usuale della shell, in cui tutti e tre questi file fanno
190 riferimento al terminale su cui si opera. Nell'esempio invece viene illustrata
191 la situazione di un programma in cui lo \itindex{standard~input}
192 \textit{standard input} è associato ad un file mentre lo
193 \itindex{standard~output} \textit{standard output} e lo
194 \itindex{standard~error} \textit{standard error} sono associati ad un altro
195 file.  Si noti poi come per questi ultimi le strutture \kstruct{file} nella
196 \itindex{file~table} \textit{file table}, pur essendo distinte, fanno
197 riferimento allo stesso \itindex{inode} \textit{inode}, dato che il file che è
198 stato aperto lo stesso. Questo è quello che avviene normalmente quando si apre
199 più volte lo stesso file.
200
201 Si ritrova quindi anche con le voci della \itindex{file~table} \textit{file
202   table} una situazione analoga di quella delle voci di una directory, con la
203 possibilità di avere più voci che fanno riferimento allo stesso
204 \itindex{inode} \textit{inode}. L'analogia è in realtà molto stretta perché
205 quando si cancella un file, il kernel verifica anche che non resti nessun
206 riferimento in una una qualunque voce della \itindex{file~table} \textit{file
207   table} prima di liberare le risorse ad esso associate e disallocare il
208 relativo \itindex{inode} \textit{inode}.
209
210 Nelle vecchie versioni di Unix (ed anche in Linux fino al kernel 2.0.x) il
211 numero di file aperti era anche soggetto ad un limite massimo dato dalle
212 dimensioni del vettore di puntatori con cui era realizzata la tabella dei file
213 descriptor dentro \kstruct{files\_struct}; questo limite intrinseco nei kernel
214 più recenti non sussiste più, dato che si è passati da un vettore ad una
215 lista, ma restano i limiti imposti dall'amministratore (vedi
216 sez.~\ref{sec:sys_limits}).
217
218
219
220 \subsection{Apertura e creazione di un file}
221 \label{sec:file_open}
222
223 La funzione di sistema \funcd{open} è la principale funzione dell'interfaccia
224 di gestione dei file, quella che dato un \textit{pathname} consente di
225 ottenere un file descriptor ``\textsl{aprendo}'' il file
226 corrispondente,\footnote{è \func{open} che alloca \kstruct{file}, la inserisce
227   nella \itindex{file~table} \textit{file table} e crea il riferimento nella
228   \kstruct{files\_struct} del processo.} il suo prototipo è:
229
230 \begin{funcproto}{
231 \fhead{sys/types.h}
232 \fhead{sys/stat.h}
233 \fhead{fcntl.h}
234 \fdecl{int open(const char *pathname, int flags)}
235 \fdecl{int open(const char *pathname, int flags, mode\_t mode)}
236
237 \fdesc{Apre un file.} 
238 }
239
240 {La funzione ritorna il file descriptor in caso di successo e $-1$ per un
241   errore, nel qual caso \var{errno} assumerà uno dei valori:
242   \begin{errlist}
243   \item[\errcode{EEXIST}] \param{pathname} esiste e si è specificato
244     \const{O\_CREAT} e \const{O\_EXCL}.
245   \item[\errcode{EINTR}] la funzione era bloccata ed è stata interrotta da un
246     segnale (vedi sez.~\ref{sec:sig_gen_beha}).
247   \item[\errcode{EISDIR}] \param{pathname} indica una directory e si è tentato
248     l'accesso in scrittura o in lettura/scrittura.
249   \item[\errcode{EFBIG}] il file è troppo grande per essere aperto (lo
250     standard richiederebbe \errval{EOVERFLOW}).
251   \item[\errcode{ELOOP}] si sono incontrati troppi collegamenti simbolici nel
252     risolvere \param{pathname} o si è indicato \const{O\_NOFOLLOW} e
253     \param{pathname} è un collegamento simbolico.
254   \item[\errcode{ENODEV}] \param{pathname} si riferisce a un file di
255     dispositivo che non esiste.
256   \item[\errcode{ENOENT}] \param{pathname} non esiste e non si è richiesto
257     \const{O\_CREAT}, o non esiste un suo componente. 
258   \item[\errcode{ENOTDIR}] si è specificato \const{O\_DIRECTORY} e
259     \param{pathname} non è una directory.
260   \item[\errcode{ENXIO}] si sono impostati \const{O\_NOBLOCK} o
261     \const{O\_WRONLY} ed il file è una fifo che non viene letta da nessun
262     processo o \param{pathname} è un file di dispositivo ma il dispositivo è
263     assente.
264   \item[\errcode{EPERM}] si è specificato \const{O\_NOATIME} e non si è né
265     amministratori né proprietari del file.
266   \item[\errcode{ETXTBSY}] si è cercato di accedere in scrittura all'immagine
267     di un programma in esecuzione.
268   \item[\errcode{EWOULDBLOCK}] la funzione si sarebbe bloccata ma si è
269     richiesto \const{O\_NOBLOCK}.
270   \end{errlist}
271   ed inoltre \errval{EACCES}, \errval{EFAULT}, \errval{EMFILE},
272   \errval{ENAMETOOLONG}, \errval{ENFILE}, \errval{ENOMEM}, \errval{ENOSPC},
273   \errval{EROFS}, nel loro significato generico.}
274 \end{funcproto}
275
276 La funzione apre il file indicato da \param{pathname} nella modalità indicata da
277 \param{flags}. Essa può essere invocata in due modi diversi, specificando
278 opzionalmente un terzo argomento \param{mode}. Qualora il file non esista e
279 venga creato, questo argomento consente di indicare quali permessi dovranno
280 essergli assegnati. I valori possibili sono gli stessi già visti in
281 sez.~\ref{sec:file_perm_overview} e possono essere specificati come OR binario
282 delle costanti descritte in tab.~\ref{tab:file_bit_perm}. Questi permessi sono
283 comunque filtrati dal valore della \itindex{umask} \textit{umask} (vedi
284 sez.~\ref{sec:file_perm_management}) del processo.
285
286 La funzione restituisce sempre il primo file descriptor libero, e questa
287 caratteristica permette di prevedere qual è il valore del file descriptor che
288 si otterrà al ritorno di \func{open}, e viene spesso usata dalle applicazioni
289 per sostituire i file corrispondenti ai file standard visti in
290 tab.~\ref{tab:file_std_files}. Se ad esempio si chiude lo
291 \itindex{standard~input} \textit{standard input} e si apre subito dopo un
292 nuovo file questo diventerà il nuovo \itindex{standard~input} \textit{standard
293   input} (avrà cioè il file descriptor 0).
294
295 Al momento dell'apertura il nuovo file descriptor non è condiviso con nessun
296 altro processo (torneremo sul significato della condivisione dei file
297 descriptor, che in genere si ottiene dopo una \func{fork}, in
298 sez.~\ref{sec:file_sharing}) ed è impostato, come accennato in
299 sez.~\ref{sec:proc_exec}, per restare aperto attraverso una
300 \func{exec}. Inoltre la posizione sul file, il cosiddetto \textit{offset}, è
301 impostata all'inizio del file. Una volta aperto un file si potrà operare su di
302 esso direttamente tramite il file descriptor, e quanto avviene al
303 \textit{pathname} con cui lo si è aperto sarà del tutto ininfluente.
304
305 Il comportamento della funzione e le diverse modalità con cui può essere
306 aperto il file vengono controllati dall'argomento \param{flags} il cui valore
307 deve essere indicato come maschera binaria in cui ciascun bit ha un
308 significato specifico.  Alcuni di questi bit vanno anche a costituire i
309 cosiddetti \textsl{flag di stato} del file (o \itindex{file~status~flag}
310 \textit{file status flags}), che vengono mantenuti nel campo \var{f\_flags}
311 della struttura \kstruct{file} che abbiamo riportato anche in
312 fig.~\ref{fig:file_proc_file}).
313
314 Ciascun flag viene identificato da una apposita costante, ed il valore
315 di \param{flags} deve essere specificato come OR aritmetico di queste
316 costanti. I vari bit che si possono usare come componenti di \param{flags}
317 sono divisi in tre gruppi principali. Il primo gruppo è quello dei cosiddetti
318 flag delle \textsl{modalità di accesso} (o \textit{access mode flags}), che
319 specificano che tipo di accesso si effettuerà sul file, fra lettura, scrittura
320 e lettura/scrittura. Questa modalità deve essere indicata usando una delle
321 costanti di tab.~\ref{tab:open_access_mode_flag}.
322
323 \begin{table}[htb]
324   \centering
325   \footnotesize
326     \begin{tabular}[c]{|l|l|}
327       \hline
328       \textbf{Flag} & \textbf{Significato} \\
329       \hline
330       \hline
331       \const{O\_RDONLY} & Apre il file in sola lettura.\\
332       \const{O\_WRONLY} & Apre il file in sola scrittura.\\
333       \const{O\_RDWR}   & Apre il file sia in lettura che in scrittura.\\
334       \hline
335     \end{tabular}
336     \caption{Le tre costanti che identificano le modalità di accesso
337       nell'apertura di un file.}
338   \label{tab:open_access_mode_flag}
339 \end{table}
340
341 A differenza di tutti gli altri flag che vedremo in seguito, in questo caso
342 non si ha a che fare con singoli bit separati dell'argomento \param{flags}, ma
343 con un numero composto da due bit. Questo significa ad esempio che la
344 combinazione \code{\const{O\_RDONLY}|\const{O\_WRONLY}} non è affatto
345 equivalente a \const{O\_WRONLY}, e non deve essere usata.\footnote{in realtà
346   su Linux, dove i valori per le tre costanti di
347   tab.~\ref{tab:open_access_mode_flag} sono rispettivamente $0$, $1$ e $2$, il
348   valore $3$ viene usato con un significato speciale ed assolutamente fuori
349   standard, disponibile solo per i file di dispositivo e solo per alcuni
350   driver, in cui si richiede la verifica della capacità di accesso in lettura
351   e scrittura ma viene restituito un file descriptor che non può essere letto
352   o scritto, ma solo usato con una \func{ioctl} (vedi
353   sez.~\ref{sec:file_ioctl}).}
354
355 La modalità di accesso deve sempre essere specificata quando si apre un file,
356 il valore indicato in \param{flags} viene salvato nei
357 \itindex{file~status~flag} \textit{file status flags}, e può essere riletto
358 con \func{fcntl} (vedi sez.~\ref{sec:file_fcntl}), il relativo valore può
359 essere poi ottenuto un AND aritmetico della maschera binaria
360 \const{O\_ACCMODE}, ma non può essere modificato. Nella \acr{glibc} sono
361 definite inoltre \const{O\_READ} come sinonimo di \const{O\_RDONLY} e
362 \const{O\_WRITE} come sinonimo di \const{O\_WRONLY}.\footnote{si tratta di
363   definizioni completamente fuori standard, attinenti insieme a
364   \const{O\_EXEC}, che permetterebbe l'apertura di un file per l'esecuzione,
365   ad un non meglio precisato ``\textit{GNU system}''; pur essendo equivalenti
366   alle definizioni classiche non è comunque il caso di utilizzarle.}
367
368 Il secondo gruppo di flag è quello delle \textsl{modalità di
369   apertura},\footnote{la pagina di manuale di \func{open} parla di
370   \textit{file creation flags}, ma alcuni di questi flag non hanno nulla a che
371   fare con la creazione dei file, mentre il manuale dalla \acr{glibc} parla di
372   più correttamente di \textit{open-time flags}, dato che si tratta di flag il
373   cui significato ha senso solo al momento dell'apertura del file.} che
374 permettono di specificare alcune delle caratteristiche del comportamento di
375 \func{open} nel momento in viene eseguita per aprire un file. Questi flag
376 hanno effetto solo nella chiamata della funzione, non sono memorizzati fra i
377 \itindex{file~status~flag} \textit{file status flags} e non possono essere
378 riletti da \func{fcntl} (vedi sez.~\ref{sec:file_fcntl}).
379
380 \begin{table}[htb]
381   \centering
382   \footnotesize
383     \begin{tabular}[c]{|l|p{10 cm}|}
384       \hline
385       \textbf{Flag} & \textbf{Significato} \\
386       \hline
387       \hline
388       \const{O\_CREAT} &    Se il file non esiste verrà creato, con le regole
389                             di titolarità del file viste in
390                             sez.~\ref{sec:file_ownership_management}. Se si
391                             imposta questo flag l'argomento \param{mode} deve
392                             essere sempre specificato.\\  
393       \const{O\_DIRECTORY}& Se \param{pathname} non è una directory la
394                             chiamata fallisce. Questo flag, introdotto con il
395                             kernel 2.1.126, è specifico di Linux e
396                             serve ad evitare dei possibili
397                             \itindex{Denial~of~Service~(DoS)}
398                             \textit{DoS}\footnotemark quando \func{opendir} 
399                             viene chiamata su una fifo o su un dispositivo
400                             associato ad una unità a nastri. Non viene
401                             usato al di fuori dell'implementazione di
402                             \func{opendir}, ed è utilizzabile soltanto se si è
403                             definata la macro \macro{\_GNU\_SOURCE}.\\
404       \const{O\_EXCL}     & Deve essere usato in congiunzione con
405                             \const{O\_CREAT} ed in tal caso impone che il file
406                             indicato da \param{pathname} non sia già esistente
407                             (altrimenti causa il fallimento della chiamata con
408                             un errore di \errcode{EEXIST}).\\
409       \const{O\_LARGEFILE}& Viene usato sui sistemi a 32 bit per richiedere
410                             l'apertura di file molto grandi, la cui
411                             dimensione non è rappresentabile con la versione a
412                             32 bit del tipo \type{off\_t}, utilizzando
413                             l'interfaccia alternativa abilitata con la
414                             macro \macro{\_LARGEFILE64\_SOURCE}. Come
415                             illustrato in sez.~\ref{sec:intro_gcc_glibc_std} è
416                             sempre preferibile usare la conversione automatica
417                             delle funzioni che si attiva assegnando a $64$ la
418                             macro \macro{\_FILE\_OFFSET\_BITS} e non usare mai
419                             questo flag.\\
420       \const{O\_NOCTTY}   & Se \param{pathname} si riferisce ad un dispositivo
421                             di terminale, questo non diventerà il terminale di
422                             controllo, anche se il processo non ne ha ancora
423                             uno (si veda sez.~\ref{sec:sess_ctrl_term}).\\ 
424       \const{O\_NOFOLLOW} & Se \param{pathname} è un collegamento simbolico
425                             la chiamata fallisce. Questa è un'estensione BSD
426                             aggiunta in Linux a partire dal kernel
427                             2.1.126 ed utilizzabile soltanto se si è definata
428                             la macro \macro{\_GNU\_SOURCE}.\\ 
429       \const{O\_TRUNC}    & Se usato su un file di dati aperto in scrittura,
430                             ne tronca la lunghezza a zero; con un terminale o
431                             una fifo viene ignorato, negli altri casi il
432                             comportamento non è specificato.\\ 
433       \hline
434     \end{tabular}
435     \caption{Le costanti che identificano le \textit{modalità di apertura} di
436       un file.} 
437   \label{tab:open_time_flag}
438 \end{table}
439
440 \footnotetext{acronimo di \itindex{Denial~of~Service~(DoS)} \textit{Denial of
441     Service}, si chiamano così attacchi miranti ad impedire un servizio
442   causando una qualche forma di carico eccessivo per il sistema, che resta
443   bloccato nelle risposte all'attacco.}
444
445 Si è riportato in tab.~\ref{tab:open_time_flag} l'elenco dei flag delle
446 \textsl{modalità di apertura}.\footnote{la \acr{glibc} definisce anche i due
447   flag \const{O\_SHLOCK}, che aprirebbe il file con uno \textit{shared lock} e
448   \const{O\_EXLOCK} che lo aprirebbe con un \textit{exclusive lock} (vedi
449   sez.~\ref{sec:file_locking}, si tratta di opzioni specifiche di BSD, che non
450   esistono con Linux.}  Uno di questi, \const{O\_EXCL}, ha senso solo se usato
451 in combinazione a \const{O\_CREAT} quando si vuole creare un nuovo file per
452 assicurarsi che questo non esista di già, e lo si usa spesso per creare i
453 cosiddetti \index{file!di lock} ``\textsl{file di lock}'' (vedi
454 sez.~\ref{sec:ipc_file_lock}). Si tenga presente che questa opzione è
455 supportata su NFS solo a partire da NFSv3 e con il kernel 2.6, nelle versioni
456 precedenti la funzionalità viene emulata controllando prima l'esistenza del
457 file per cui usarla per creare \index{file!di lock} un file di lock potrebbe
458 dar luogo a una \itindex{race~condition} \textit{race condition}.\footnote{un
459   file potrebbe venir creato fra il controllo la successiva apertura
460   \const{O\_CREAT}, la cosa si può risolvere comunque creando un file con un
461   nome univoco ed usando la funzione \func{link} per creare il \index{file!di
462     lock} file di lock, (vedi sez.~\ref{sec:ipc_file_lock}).}
463
464 Se si usa \const{O\_EXCL} senza \const{O\_CREAT} il comportamento è
465 indefinito.  Nella creazione di un file con \const{O\_CREAT} occorre sempre
466 specificare l'argomento di \param{mode}, che altrimenti è ignorato. Si tenga
467 presente che indipendentemente dai permessi che si possono assegnare, che
468 potrebbero non consentire in seguito lettura o scrittura, quando il file viene
469 aperto l'accesso viene garantito secondo quanto richiesto con i flag di
470 tab.~\ref{tab:open_access_mode_flag}.  Quando viene creato un nuovo file
471 \const{O\_CREAT} con tutti e tre i tempi del file di
472 tab.~\ref{tab:file_file_times} vengono impostati al tempo corrente. Se invece
473 si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
474 \textit{modification time} e lo \textit{status change time}.
475
476 \begin{table}[htb]
477   \centering
478   \footnotesize
479     \begin{tabular}[c]{|l|p{10 cm}|}
480       \hline
481       \textbf{Flag} & \textbf{Significato} \\
482       \hline
483       \hline
484       \const{O\_APPEND}  & Il file viene aperto in \itindex{append~mode}
485                            \textit{append mode}. La posizione sul file (vedi
486                            sez.~\ref{sec:file_lseek}) viene sempre mantenuta
487                            sulla sua coda, per cui quanto si scrive
488                            viene sempre aggiunto al contenuto precedente. Con
489                            NFS questa funzionalità non è supportata 
490                            e viene emulata, per questo possono verificarsi
491                            \itindex{race~condition} \textit{race 
492                              condition} con una sovrapposizione dei dati se
493                            più di un processo scrive allo stesso tempo. \\
494       \const{O\_ASYNC}   & Apre il file per l'I/O in modalità asincrona (vedi
495                            sez.~\ref{sec:file_asyncronous_io}). Quando è
496                            impostato viene generato il segnale \signal{SIGIO}
497                            tutte le volte che il file è pronto per le
498                            operazioni di lettura o scrittura. Questo flag si
499                            può usare solo terminali, pseudoterminali e socket
500                            e, a partire dal kernel 2.6, anche sulle fifo.\\ 
501       \const{O\_CLOEXEC}&  Attiva la modalità di \itindex{close-on-exec}
502                            \textit{close-on-exec} (vedi
503                            sez.~\ref{sec:proc_exec}) sul file. Il flag è 
504                            previsto dallo standard POSIX.1-2008, ed è stato
505                            introdotto con il kernel 2.6.23 per evitare una
506                            \itindex{race~condition} \textit{race condition}
507                            che si potrebbe verificare con i \textit{thread}
508                            fra l'apertura del file e l'impostazione della
509                            suddetta modalità con \func{fcntl} (vedi
510                            sez.~\ref{sec:file_fcntl}).\\
511       \const{O\_DIRECT}  & Esegue l'I/O direttamente dalla memoria in
512                            \textit{user space} in maniera sincrona, in modo da
513                            scavalcare i meccanismi di bufferizzazione del
514                            kernel. Introdotto con il kernel 2.4.10 ed
515                            utilizzabile soltanto se si è definita la 
516                            macro \macro{\_GNU\_SOURCE}.\\ 
517       \const{O\_NOATIME} & Blocca l'aggiornamento dei tempi di accesso dei
518                            file (vedi sez.~\ref{sec:file_file_times}). Per
519                            molti filesystem questa funzionalità non è
520                            disponibile per il singolo file ma come opzione
521                            generale da specificare in fase di montaggio.\\ 
522       \const{O\_NONBLOCK}& Apre il file in \textsl{modalità non bloccante} per
523                            le operazioni di I/O (vedi
524                            sez.~\ref{sec:file_noblocking}). Questo significa
525                            il fallimento delle successive operazioni di
526                            lettura o scrittura qualora il file non sia pronto
527                            per la loro esecuzione immediata, invece del 
528                            blocco delle stesse in attesa di una successiva
529                            possibilità di esecuzione come avviene
530                            normalmente. Questa modalità ha senso solo per le
531                            fifo, vedi sez.~\ref{sec:ipc_named_pipe}), o quando
532                            si vuole aprire un file di dispositivo per eseguire
533                            una \func{ioctl} (vedi
534                            sez.~\ref{sec:file_ioctl}).\\ 
535       \const{O\_NDELAY}  & In Linux è un sinonimo di \const{O\_NONBLOCK}, ma
536                            origina da SVr4, dove però causava il ritorno da
537                            una \func{read} con un valore nullo e non con un
538                            errore, questo introduce un'ambiguità, dato che
539                            come vedremo in sez.~\ref{sec:file_read} il ritorno
540                            di un valore nulla da parte di \func{read} ha 
541                            il significato di una \textit{end-of-file}.\\
542       \const{O\_SYNC}    & Apre il file per l'input/output sincrono. Ogni
543                            scrittura di dati si bloccherà fino alla conferma
544                            dell'arrivo di tutti i dati sull'hardware
545                            sottostante.\\
546       \hline
547     \end{tabular}
548     \caption{Le costanti che identificano le \textit{modalità di operazione} di
549       un file.} 
550   \label{tab:open_operation_flag}
551 \end{table}
552
553
554 Il terzo gruppo è quello dei flag delle \textsl{modalità di operazione},
555 riportati in tab.~\ref{tab:open_operation_flag}, che permettono di specificare
556 varie caratteristiche del comportamento delle operazioni di I/O che verranno
557 eseguite sul file. Tutti questi, tranne \const{O\_CLOEXEC}, che viene
558 mantenuto per ogni singolo file descriptor, vengono salvati nel campo
559 \var{f\_flags} della struttura \kstruct{file} insieme al valore della
560 \textsl{modalità di accesso} andando far parte dei cosiddetti \textit{file
561   status flags}. Il loro valore viene impostato alla chiamata di \func{open},
562 ma possono essere riletti ed in alcuni anche modificati, con conseguente
563 effetto sulle caratteristiche operative che controllano, con \func{fcntl}
564 (vedi sez.~\ref{sec:file_fcntl}).
565
566 Il flag \const{O\_DIRECT} non è previsto da nessuno standard, anche se è
567 presente in alcuni kernel unix-like.\footnote{il flag è stato introdotto dalla
568   SGI in IRIX, ma è presente senza limiti di allineamento dei buffer anche in
569   FreeBSD.} Per i kernel della serie 2.4 si deve garantire che i buffer in
570 \textit{user space} da cui si effettua il trasferimento diretto dei dati siano
571 allineati alle dimensioni dei blocchi del filesystem. Con il kernel 2.6 in
572 genere basta che siano allineati a multipli di 512 byte, ma le restrizioni
573 possono variare a seconda del filesystem, ed inoltre su alcuni filesystem può
574 non essere supportato nel qual caso si avrà un errore di \errval{EINVAL}.
575
576 Lo scopo di \const{O\_DIRECT} è consentire un completo controllo sulla
577 bufferizzazione dei propri dati per quelle applicazioni (in genere database)
578 che hanno esigenze specifiche che non vengono soddisfatte nella maniera più
579 efficiente dalla politica generica utilizzata dal kernel. In genere l'uso di
580 questo flag peggiora le prestazioni tranne quando le applicazioni sono in
581 grado di ottimizzare la propria bufferizzazione in maniera adeguata. Se lo si
582 usa si deve avere cura di non mescolare questo tipo di accesso con quello
583 ordinario, in quante le esigenze di mantenere coerenti i dati porterebbero ad
584 un peggioramento delle prestazioni. Lo stesso dicasi per l'interazione con
585 eventuale mappatura in memoria del file (vedi sez.~\ref{sec:file_memory_map}).
586
587 Si tenga presente infine che anche se l'uso di \const{O\_DIRECT} comporta
588 sostanzialmente una scrittura sincrona dei dati dei buffer in \textit{user
589   space}, questo non è completamente equivalente all'uso di \const{O\_SYNC}
590 che garantisce anche sulla scrittura sincrona dei metadati associati alla
591 scrittura dei dati del file. Per questo in genere è opportuno se si usa
592 \const{O\_DIRECT} è opportuno richiedere anche \const{O\_SYNC}.
593
594 Si tenga presente infine che la implementazione di \const{O\_SYNC} di Linux
595 differisce da quanto previsto dallo standard POSIX.1 che prevede, oltre a
596 questo flag che dovrebbe indicare la sincronizzazione completa di tutti i dati
597 e di tutti i metadati, altri due flag \const{O\_DSYNC} e \const{O\_RSYNC}. Il
598 primo dei due richiede la scrittura sincrona di tutti i dati del file e dei
599 metadati che ne consentono l'immediata rilettura, ma non di tutti i metadati,
600 per evitare la perdita di prestazioni relativa alla sincronizzazione di
601 informazioni ausiliarie come i tempi dei file. 
602
603 Il secondo, da usare in combinazione con \const{O\_SYNC} o \const{O\_DSYNC} ne
604 sospende l'effetto, consentento al kernel di bufferizzare le scritture, ma
605 soltanto finché non avviene una lettura, in quel caso i dati ed i metadati
606 dovranno essere sincronizzati (secondo le modalità indicate da \const{O\_SYNC}
607 e \const{O\_DSYNC}) e la lettura verrà bloccata fintanto che detta
608 sincronizzazione non sia completata.
609
610 Nel caso di Linux fino al kernel 2.6.33 la sola semantica supportata era
611 quella di \const{O\_DSYNC} o
612
613  \const{O\_DSYNC} 
614
615
616 e \const{O\_RSYNC}
617 erano sinoni
618
619
620 che una lettura si blocchi
621
622
623
624       \const{O\_DSYNC}   Variante di I/O sincrono definita da POSIX; presente
625                            dal kernel 2.1.130 come sinonimo di
626                            \const{O\_SYNC}.
627
628
629       \const{O\_RSYNC}    Variante analoga alla precedente, trattata allo
630                            stesso modo.
631
632
633
634
635
636
637 %TODO trattare le differenze fra O_DSYNC, O_SYNC e O_RSYNC introdotte nella  
638 % nello sviluppo del kernel 2.6.33, vedi http://lwn.net/Articles/350219/
639
640 Nelle prime versioni di Unix i valori di \param{flag} specificabili per
641 \func{open} erano solo quelli relativi alle modalità di accesso del file.  Per
642 questo motivo per creare un nuovo file c'era una system call apposita,
643 \funcd{creat}, il cui prototipo è:
644
645 \begin{funcproto}{
646 \fhead{fcntl.h}
647 \fdecl{int creat(const char *pathname, mode\_t mode)}
648 \fdesc{Crea un nuovo file vuoto.} 
649 }
650
651 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
652   caso \var{errno} assumerà gli stessi valori che si otterebbero con
653   \func{open}.}
654 \end{funcproto}
655
656
657 La funzione crea un nuovo file vuoto, con i permessi specificati
658 dall'argomento \param{mode}. È del tutto equivalente a \code{open(filedes,
659   O\_CREAT|O\_WRONLY|O\_TRUNC, mode)} e resta solo per compatibilità con i
660 vecchi programmi.
661
662
663 \subsection{La funzione \func{close}}
664 \label{sec:file_close}
665
666 La funzione \funcd{close} permette di chiudere un file, in questo modo il file
667 descriptor ritorna disponibile; il suo prototipo è:
668 \begin{prototype}{unistd.h}{int close(int fd)}
669   Chiude il descrittore \param{fd}. 
670   
671   \bodydesc{La funzione ritorna 0 in caso di successo e $-1$ in caso di
672     errore, con \var{errno} che assume i valori:
673   \begin{errlist}
674     \item[\errcode{EBADF}]  \param{fd} non è un descrittore valido.
675     \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
676   \end{errlist}
677   ed inoltre \errval{EIO}.}
678 \end{prototype}
679
680 La chiusura di un file rilascia ogni blocco (il \textit{file locking}
681 \itindex{file~locking} è trattato in sez.~\ref{sec:file_locking}) che il
682 processo poteva avere acquisito su di esso; se \param{fd} è l'ultimo
683 riferimento (di eventuali copie) ad un file aperto, tutte le risorse nella
684 \itindex{file~table} \textit{file table} vengono rilasciate. Infine se il file
685 descriptor era l'ultimo riferimento ad un file su disco quest'ultimo viene
686 cancellato.
687
688 Si ricordi che quando un processo termina anche tutti i suoi file descriptor
689 vengono chiusi, molti programmi sfruttano questa caratteristica e non usano
690 esplicitamente \func{close}. In genere comunque chiudere un file senza
691 controllarne lo stato di uscita è errore; infatti molti filesystem
692 implementano la tecnica del \textit{write-behind}, per cui una \func{write}
693 può avere successo anche se i dati non sono stati scritti, un eventuale errore
694 di I/O allora può sfuggire, ma verrà riportato alla chiusura del file: per
695 questo motivo non effettuare il controllo può portare ad una perdita di dati
696 inavvertita.\footnote{in Linux questo comportamento è stato osservato con NFS
697   e le quote su disco.}
698
699 In ogni caso una \func{close} andata a buon fine non garantisce che i dati
700 siano stati effettivamente scritti su disco, perché il kernel può decidere di
701 ottimizzare l'accesso a disco ritardandone la scrittura. L'uso della funzione
702 \func{sync} (vedi sez.~\ref{sec:file_sync}) effettua esplicitamente il
703 \emph{flush} dei dati, ma anche in questo caso resta l'incertezza dovuta al
704 comportamento dell'hardware (che a sua volta può introdurre ottimizzazioni
705 dell'accesso al disco che ritardano la scrittura dei dati, da cui l'abitudine
706 di ripetere tre volte il comando prima di eseguire lo shutdown).
707
708
709 \subsection{La gestione della posizione nel file}
710 \label{sec:file_lseek}
711
712 Come già accennato in sez.~\ref{sec:file_fd} a ciascun file aperto è associata
713 una \textsl{posizione corrente nel file} (il cosiddetto \textit{file offset},
714 mantenuto nel campo \var{f\_pos} di \kstruct{file}) espressa da un numero intero
715 positivo come numero di byte dall'inizio del file. Tutte le operazioni di
716 lettura e scrittura avvengono a partire da questa posizione che viene
717 automaticamente spostata in avanti del numero di byte letti o scritti.
718
719 In genere (a meno di non avere richiesto la modalità \itindex{append~mode}
720 \const{O\_APPEND}) questa posizione viene impostata a zero all'apertura del
721 file. È possibile impostarla ad un valore qualsiasi con la funzione
722 \funcd{lseek}, il cui prototipo è:
723 \begin{functions}
724   \headdecl{sys/types.h}
725   \headdecl{unistd.h}
726   \funcdecl{off\_t lseek(int fd, off\_t offset, int whence)}
727   Imposta la posizione attuale nel file. 
728   
729   \bodydesc{La funzione ritorna il valore della posizione corrente in caso di
730     successo e $-1$ in caso di errore nel qual caso \var{errno} assumerà uno
731     dei valori:
732   \begin{errlist}
733     \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket o una fifo.
734     \item[\errcode{EINVAL}] \param{whence} non è un valore valido.
735     \item[\errcode{EOVERFLOW}] \param{offset} non può essere rappresentato nel
736       tipo \type{off\_t}.
737   \end{errlist}
738   ed inoltre \errval{EBADF}.}
739 \end{functions}
740
741 La nuova posizione è impostata usando il valore specificato da \param{offset},
742 sommato al riferimento dato da \param{whence}; quest'ultimo può assumere i
743 seguenti valori\footnote{per compatibilità con alcune vecchie notazioni
744   questi valori possono essere rimpiazzati rispettivamente con 0, 1 e 2 o con
745   \const{L\_SET}, \const{L\_INCR} e \const{L\_XTND}.}:
746 \begin{basedescript}{\desclabelwidth{2.0cm}}
747 \item[\const{SEEK\_SET}] si fa riferimento all'inizio del file: il valore
748   (sempre positivo) di \param{offset} indica direttamente la nuova posizione
749   corrente.
750 \item[\const{SEEK\_CUR}] si fa riferimento alla posizione corrente del file:
751   ad essa viene sommato \param{offset} (che può essere negativo e positivo)
752   per ottenere la nuova posizione corrente.
753 \item[\const{SEEK\_END}] si fa riferimento alla fine del file: alle dimensioni
754   del file viene sommato \param{offset} (che può essere negativo e positivo)
755   per ottenere la nuova posizione corrente.
756 \end{basedescript}
757
758 % TODO, trattare, SEEK_HOLE e SEEK_DATA, inclusi nel kernel 3.1, vedi
759 % http://lwn.net/Articles/439623/ 
760
761
762 Si tenga presente che la chiamata a \func{lseek} non causa nessun accesso al
763 file, si limita a modificare la posizione corrente (cioè il valore
764 \var{f\_pos} in \param{file}, vedi fig.~\ref{fig:file_proc_file}).  Dato che
765 la funzione ritorna la nuova posizione, usando il valore zero
766 per \param{offset} si può riottenere la posizione corrente nel file chiamando
767 la funzione con \code{lseek(fd, 0, SEEK\_CUR)}.
768
769 Si tenga presente inoltre che usare \const{SEEK\_END} non assicura affatto che
770 la successiva scrittura avvenga alla fine del file, infatti se questo è stato
771 aperto anche da un altro processo che vi ha scritto, la fine del file può
772 essersi spostata, ma noi scriveremo alla posizione impostata in precedenza
773 (questa è una potenziale sorgente di \itindex{race~condition} \textit{race
774   condition}, vedi sez.~\ref{sec:file_atomic}).
775
776 Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
777 questo caso la funzione ritorna l'errore \errcode{ESPIPE}. Questo, oltre che
778 per i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che
779 non supportano questa funzione, come ad esempio per i file di
780 terminale.\footnote{altri sistemi, usando \const{SEEK\_SET}, in questo caso
781   ritornano il numero di caratteri che vi sono stati scritti.} Lo standard
782 POSIX però non specifica niente in proposito. Inoltre alcuni
783 \index{file!speciali} file speciali, ad esempio \file{/dev/null}, non causano
784 un errore ma restituiscono un valore indefinito.
785
786 \itindbeg{sparse~file} 
787
788 Infine si tenga presente che, come accennato in sez.~\ref{sec:file_file_size},
789 con \func{lseek} è possibile impostare una posizione anche oltre la corrente
790 fine del file; ed in tal caso alla successiva scrittura il file sarà esteso a
791 partire da detta posizione. In questo caso si ha quella che viene chiamata la
792 creazione di un \index{file!\textit{hole}} \textsl{buco} nel file, accade cioè
793 che nonostante la dimensione del file sia cresciuta in seguito alla scrittura
794 effettuata, lo spazio vuoto fra la precedente fine del file ed la nuova parte
795 scritta dopo lo spostamento, non corrisponda ad una allocazione effettiva di
796 spazio su disco, che sarebbe inutile dato che quella zona è effettivamente
797 vuota.
798
799 Questa è una delle caratteristiche spcifiche della gestione dei file di un
800 sistema unix-like, ed in questo caso si ha appunto quello che in gergo si
801 chiama un \index{file!\textit{hole}} \textit{hole} nel file e si dice che il
802 file in questione è uno \textit{sparse file}. In sostanza, se si ricorda la
803 struttura di un filesystem illustrata in fig.~\ref{fig:file_filesys_detail},
804 quello che accade è che nell'\textit{inode} del file viene segnata
805 l'allocazione di un blocco di dati a partire dalla nuova posizione, ma non
806 viene allocato nulla per le posizioni intermedie; in caso di lettura
807 sequenziale del contenuto del file il kernel si accorgerà della presenza del
808 buco, e restituirà degli zeri come contenuto di quella parte del file.
809
810 Questa funzionalità comporta una delle caratteristiche della gestione dei file
811 su Unix che spesso genera più confusione in chi non la conosce, per cui
812 sommando le dimensioni dei file si può ottenere, se si hanno molti
813 \textit{sparse file}, un totale anche maggiore della capacità del proprio
814 disco e comunque maggiore della dimensione che riporta un comando come
815 \cmd{du}, che calcola lo spazio disco occupato in base al numero dei blocchi
816 effettivamente allocati per il file.
817
818 Questo avviene proprio perché in un sistema unix-like la dimensione di un file
819 è una caratteristica del tutto indipendente dalla quantità di spazio disco
820 effettivamente allocato, e viene registrata sull'\textit{inode} come le altre
821 proprietà del file. La dimensione viene aggiornata automaticamente quando si
822 estende un file scrivendoci, e viene riportata dal campo \var{st\_size} di una
823 struttura \struct{stat} quando si effettua chiamata ad una delle funzioni
824 \texttt{*stat} viste in sez.~\ref{sec:file_stat}.
825
826 Questo comporta che in generale, fintanto che lo si è scritto sequenzialmente,
827 la dimensione di un file sarà più o meno corrispondente alla quantità di
828 spazio disco da esso occupato, ma esistono dei casi, come questo in cui ci si
829 sposta in una posizione oltre la fine corrente del file, o come quello
830 accennato in in sez.~\ref{sec:file_file_size} in cui si estende la dimensione
831 di un file con una \func{truncate}, in cui in sostanza di modifica il valore
832 della dimensione di \var{st\_size} senza allocare spazio su disco. Questo
833 consente di creare inizialmente file di dimensioni anche molto grandi, senza
834 dover occupare da subito dello spazio disco che in realtà sarebbe
835 inutilizzato.
836
837 \itindend{sparse~file}
838
839
840 \subsection{Le funzioni per la lettura}
841 \label{sec:file_read}
842
843 Una volta che un file è stato aperto (con il permesso in lettura) si possono
844 leggere i dati che contiene utilizzando la funzione \funcd{read}, il cui
845 prototipo è:
846 \begin{prototype}{unistd.h}{ssize\_t read(int fd, void * buf, size\_t count)}
847   
848   Cerca di leggere \param{count} byte dal file \param{fd} al buffer
849   \param{buf}.
850   
851   \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
852     $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
853   \begin{errlist}
854   \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale prima di
855     aver potuto leggere qualsiasi dato.
856   \item[\errcode{EAGAIN}] la funzione non aveva nessun dato da restituire e si
857     era aperto il file in modalità \const{O\_NONBLOCK}.
858   \end{errlist}
859   ed inoltre \errval{EBADF}, \errval{EIO}, \errval{EISDIR}, \errval{EBADF},
860   \errval{EINVAL} e \errval{EFAULT} ed eventuali altri errori dipendenti dalla
861   natura dell'oggetto connesso a \param{fd}.}
862 \end{prototype}
863
864 La funzione tenta di leggere \param{count} byte a partire dalla posizione
865 corrente nel file. Dopo la lettura la posizione sul file è spostata
866 automaticamente in avanti del numero di byte letti. Se \param{count} è zero la
867 funzione restituisce zero senza nessun altro risultato.  Si deve sempre tener
868 presente che non è detto che la funzione \func{read} restituisca sempre il
869 numero di byte richiesto, ci sono infatti varie ragioni per cui la funzione
870 può restituire un numero di byte inferiore; questo è un comportamento normale,
871 e non un errore, che bisogna sempre tenere presente.  
872
873 La prima e più ovvia di queste ragioni è che si è chiesto di leggere più byte
874 di quanto il file ne contenga. In questo caso il file viene letto fino alla
875 sua fine, e la funzione ritorna regolarmente il numero di byte letti
876 effettivamente. Raggiunta la fine del file, alla ripetizione di un'operazione
877 di lettura, otterremmo il ritorno immediato di \func{read} con uno zero.  La
878 condizione di raggiungimento della fine del file non è un errore, e viene
879 segnalata appunto da un valore di ritorno di \func{read} nullo. Ripetere
880 ulteriormente la lettura non avrebbe nessun effetto se non quello di
881 continuare a ricevere zero come valore di ritorno.
882
883 Con i \textsl{file regolari} questa è l'unica situazione in cui si può avere
884 un numero di byte letti inferiore a quello richiesto, ma questo non è vero
885 quando si legge da un terminale, da una fifo o da una pipe. In tal caso
886 infatti, se non ci sono dati in ingresso, la \func{read} si blocca (a meno di
887 non aver selezionato la modalità non bloccante, vedi
888 sez.~\ref{sec:file_noblocking}) e ritorna solo quando ne arrivano; se il numero
889 di byte richiesti eccede quelli disponibili la funzione ritorna comunque, ma
890 con un numero di byte inferiore a quelli richiesti.
891
892 Lo stesso comportamento avviene caso di lettura dalla rete (cioè su un socket,
893 come vedremo in sez.~\ref{sec:sock_io_behav}), o per la lettura da certi file
894 di dispositivo, come le unità a nastro, che restituiscono sempre i dati ad un
895 singolo blocco alla volta, o come le linee seriali, che restituiscono solo i
896 dati ricevuti fino al momento della lettura.
897
898 Infine anche le due condizioni segnalate dagli errori \errcode{EINTR} ed
899 \errcode{EAGAIN} non sono propriamente degli errori. La prima si verifica
900 quando la \func{read} è bloccata in attesa di dati in ingresso e viene
901 interrotta da un segnale; in tal caso l'azione da intraprendere è quella di
902 rieseguire la funzione.  Torneremo in dettaglio sull'argomento in
903 sez.~\ref{sec:sig_gen_beha}.  La seconda si verifica quando il file è aperto
904 in modalità non bloccante (vedi sez.~\ref{sec:file_noblocking}) e non ci sono
905 dati in ingresso: la funzione allora ritorna immediatamente con un errore
906 \errcode{EAGAIN}\footnote{in BSD si usa per questo errore la costante
907   \errcode{EWOULDBLOCK}, in Linux, con le \acr{glibc}, questa è sinonima di
908   \errcode{EAGAIN}.} che indica soltanto che non essendoci al momento dati
909 disponibili occorre provare a ripetere la lettura in un secondo tempo.
910
911 La funzione \func{read} è una delle system call fondamentali, esistenti fin
912 dagli albori di Unix, ma nella seconda versione delle \textit{Single Unix
913   Specification}\footnote{questa funzione, e l'analoga \func{pwrite} sono
914   state aggiunte nel kernel 2.1.60, il supporto nelle \acr{glibc}, compresa
915   l'emulazione per i vecchi kernel che non hanno la system call, è stato
916   aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
917   delle librerie la funzione non è disponibile.} (quello che viene chiamato
918 normalmente Unix98, vedi sez.~\ref{sec:intro_xopen}) è stata introdotta la
919 definizione di un'altra funzione di lettura, \funcd{pread}, il cui prototipo è:
920 \begin{prototype}{unistd.h}
921 {ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
922
923 Cerca di leggere \param{count} byte dal file \param{fd}, a partire dalla
924 posizione \param{offset}, nel buffer \param{buf}.
925   
926 \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
927   $-1$ in caso di errore, nel qual caso \var{errno} assumerà i valori già
928   visti per \func{read} e \func{lseek}.}
929 \end{prototype}
930
931 La funzione prende esattamente gli stessi argomenti di \func{read} con lo
932 stesso significato, a cui si aggiunge l'argomento \param{offset} che indica
933 una posizione sul file. Identico è il comportamento ed il valore di
934 ritorno. La funzione serve quando si vogliono leggere dati dal file senza
935 modificare la posizione corrente.
936
937 L'uso di \func{pread} è equivalente all'esecuzione di una \func{read} seguita
938 da una \func{lseek} che riporti al valore precedente la posizione corrente sul
939 file, ma permette di eseguire l'operazione atomicamente. Questo può essere
940 importante quando la posizione sul file viene condivisa da processi diversi
941 (vedi sez.~\ref{sec:file_sharing}).  Il valore di
942 \param{offset} fa sempre riferimento all'inizio del file.
943
944 La funzione \func{pread} è disponibile anche in Linux, però diventa
945 accessibile solo attivando il supporto delle estensioni previste dalle
946 \textit{Single Unix Specification} con la definizione della macro:
947 \begin{verbatim}
948 #define _XOPEN_SOURCE 500
949 \end{verbatim}
950 e si ricordi di definire questa macro prima dell'inclusione del file di
951 dichiarazioni \headfile{unistd.h}.
952
953
954
955 \subsection{Le funzioni per la scrittura}
956 \label{sec:file_write}
957
958 Una volta che un file è stato aperto (con il permesso in scrittura) si può
959 scrivere su di esso utilizzando la funzione \funcd{write}, il cui prototipo è:
960 \begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)}
961   
962   Scrive \param{count} byte dal buffer \param{buf} sul file \param{fd}.
963   
964   \bodydesc{La funzione ritorna il numero di byte scritti in caso di successo
965     e $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei
966     valori:
967   \begin{errlist}
968   \item[\errcode{EINVAL}] \param{fd} è connesso ad un oggetto che non consente
969     la scrittura.
970   \item[\errcode{EFBIG}] si è cercato di scrivere oltre la dimensione massima
971     consentita dal filesystem o il limite per le dimensioni dei file del
972     processo o su una posizione oltre il massimo consentito.
973   \item[\errcode{EPIPE}] \param{fd} è connesso ad una pipe il cui altro capo è
974     chiuso in lettura; in questo caso viene anche generato il segnale
975     \signal{SIGPIPE}, se questo viene gestito (o bloccato o ignorato) la
976     funzione ritorna questo errore.
977   \item[\errcode{EINTR}] si è stati interrotti da un segnale prima di aver
978     potuto scrivere qualsiasi dato.
979   \item[\errcode{EAGAIN}] ci si sarebbe bloccati, ma il file era aperto in
980     modalità \const{O\_NONBLOCK}.
981   \end{errlist}
982   ed inoltre \errval{EBADF}, \errval{EIO}, \errval{EISDIR}, \errval{EBADF},
983   \errval{ENOSPC}, \errval{EINVAL} e \errval{EFAULT} ed eventuali altri errori
984   dipendenti dalla natura dell'oggetto connesso a \param{fd}.}
985 \end{prototype}
986
987 Come nel caso di \func{read} la funzione tenta di scrivere \param{count} byte
988 a partire dalla posizione corrente nel file e sposta automaticamente la
989 posizione in avanti del numero di byte scritti. Se il file è aperto in
990 modalità \itindex{append~mode} \const{O\_APPEND} i dati vengono sempre scritti
991 alla fine del file.  Lo standard POSIX richiede che i dati scritti siano
992 immediatamente disponibili ad una \func{read} chiamata dopo che la
993 \func{write} che li ha scritti è ritornata; ma dati i meccanismi di caching
994 non è detto che tutti i filesystem supportino questa capacità.
995
996 Se \param{count} è zero la funzione restituisce zero senza fare nient'altro.
997 Per i file ordinari il numero di byte scritti è sempre uguale a quello
998 indicato da \param{count}, a meno di un errore. Negli altri casi si ha lo
999 stesso comportamento di \func{read}.
1000
1001 Anche per \func{write} lo standard Unix98 definisce un'analoga \funcd{pwrite}
1002 per scrivere alla posizione indicata senza modificare la posizione corrente
1003 nel file, il suo prototipo è:
1004 \begin{prototype}{unistd.h}
1005 {ssize\_t pwrite(int fd, void * buf, size\_t count, off\_t offset)}
1006   
1007 Cerca di scrivere sul file \param{fd}, a partire dalla posizione
1008 \param{offset}, \param{count} byte dal buffer \param{buf}.
1009   
1010 \bodydesc{La funzione ritorna il numero di byte letti in caso di successo e
1011   $-1$ in caso di errore, nel qual caso \var{errno} assumerà i valori già
1012   visti per \func{write} e \func{lseek}.}
1013 \end{prototype}
1014 \noindent e per essa valgono le stesse considerazioni fatte per \func{pread}.
1015
1016
1017 \section{Caratteristiche avanzate}
1018 \label{sec:file_adv_func}
1019
1020 In questa sezione approfondiremo alcune delle caratteristiche più sottili
1021 della gestione file in un sistema unix-like, esaminando in dettaglio il
1022 comportamento delle funzioni base, inoltre tratteremo le funzioni che
1023 permettono di eseguire alcune operazioni avanzate con i file (il grosso
1024 dell'argomento sarà comunque affrontato in cap.~\ref{cha:file_advanced}).
1025
1026
1027 \subsection{La condivisione dei files}
1028 \label{sec:file_sharing}
1029
1030 In sez.~\ref{sec:file_fd} abbiamo descritto brevemente l'architettura
1031 dell'interfaccia con i file da parte di un processo, mostrando in
1032 fig.~\ref{fig:file_proc_file} le principali strutture usate dal kernel;
1033 esamineremo ora in dettaglio le conseguenze che questa architettura ha nei
1034 confronti dell'accesso allo stesso file da parte di processi diversi.
1035
1036 \begin{figure}[!htb]
1037   \centering
1038   \includegraphics[width=15cm]{img/filemultacc}
1039   \caption{Schema dell'accesso allo stesso file da parte di due processi 
1040     diversi}
1041   \label{fig:file_mult_acc}
1042 \end{figure}
1043
1044 Il primo caso è quello in cui due processi diversi aprono lo stesso file su
1045 disco; sulla base di quanto visto in sez.~\ref{sec:file_fd} avremo una
1046 situazione come quella illustrata in fig.~\ref{fig:file_mult_acc}: ciascun
1047 processo avrà una sua voce nella \textit{file table} referenziata da un
1048 diverso file descriptor nella sua \kstruct{file\_struct}. Entrambe le voci
1049 nella \itindex{file~table} \textit{file table} faranno però riferimento allo
1050 stesso \itindex{inode} inode su disco.
1051
1052 Questo significa che ciascun processo avrà la sua posizione corrente sul file,
1053 la sua modalità di accesso e versioni proprie di tutte le proprietà che
1054 vengono mantenute nella sua voce della \itindex{file~table} \textit{file
1055   table}. Questo ha conseguenze specifiche sugli effetti della possibile
1056 azione simultanea sullo stesso file, in particolare occorre tenere presente
1057 che:
1058 \begin{itemize}
1059 \item ciascun processo può scrivere indipendentemente; dopo ciascuna
1060   \func{write} la posizione corrente sarà cambiata solo nel processo. Se la
1061   scrittura eccede la dimensione corrente del file questo verrà esteso
1062   automaticamente con l'aggiornamento del campo \var{i\_size} \itindex{inode}
1063   nell'inode.
1064 \item se un file è in modalità \itindex{append~mode} \const{O\_APPEND} tutte
1065   le volte che viene effettuata una scrittura la posizione corrente viene
1066   prima impostata alla dimensione corrente del file letta \itindex{inode}
1067   dall'inode. Dopo la scrittura il file viene automaticamente esteso.
1068 \item l'effetto di \func{lseek} è solo quello di cambiare il campo
1069   \var{f\_pos} nella struttura \kstruct{file} della \itindex{file~table}
1070   \textit{file table}, non c'è nessuna operazione sul file su disco. Quando la
1071   si usa per porsi alla fine del file la posizione viene impostata leggendo la
1072   dimensione corrente \itindex{inode} dall'inode.
1073 \end{itemize}
1074
1075 \begin{figure}[!htb]
1076   \centering
1077   \includegraphics[width=15cm]{img/fileshar}
1078   \caption{Schema dell'accesso ai file da parte di un processo figlio}
1079   \label{fig:file_acc_child}
1080 \end{figure}
1081
1082 Il secondo caso è quello in cui due file descriptor di due processi diversi
1083 puntino alla stessa voce nella \itindex{file~table} \textit{file table};
1084 questo è ad esempio il caso dei file aperti che vengono ereditati dal processo
1085 figlio all'esecuzione di una \func{fork} (si ricordi quanto detto in
1086 sez.~\ref{sec:proc_fork}). La situazione è illustrata in
1087 fig.~\ref{fig:file_acc_child}; dato che il processo figlio riceve una copia
1088 dello spazio di indirizzi del padre, riceverà anche una copia di
1089 \kstruct{file\_struct} e relativa tabella dei file aperti.
1090
1091 In questo modo padre e figlio avranno gli stessi file descriptor che faranno
1092 riferimento alla stessa voce nella \textit{file table}, condividendo così la
1093 posizione corrente sul file. Questo ha le conseguenze descritte a suo tempo in
1094 sez.~\ref{sec:proc_fork}: in caso di scrittura contemporanea la posizione
1095 corrente nel file varierà per entrambi i processi (in quanto verrà modificato
1096 \var{f\_pos} che è lo stesso per entrambi).
1097
1098 Si noti inoltre che anche i \itindex{file~status~flag} flag di stato del file
1099 (quelli impostati dall'argomento \param{flag} di \func{open}) essendo tenuti
1100 nella voce della \textit{file table}\footnote{per la precisione nel campo
1101   \var{f\_flags} di \kstruct{file}, vedi fig.~\ref{fig:kstruct_file}.},
1102 vengono in questo caso condivisi. Ai file però sono associati anche altri
1103 flag, dei quali l'unico usato al momento è \const{FD\_CLOEXEC}, detti
1104 \index{file~descriptor~flags} \textit{file descriptor flags}. Questi ultimi
1105 sono tenuti invece in \kstruct{file\_struct}, e perciò sono specifici di
1106 ciascun processo e non vengono modificati dalle azioni degli altri anche in
1107 caso di condivisione della stessa voce della \textit{file table}.
1108
1109
1110
1111 \subsection{Operazioni atomiche con i file}
1112 \label{sec:file_atomic}
1113
1114 Come si è visto in un sistema unix-like è sempre possibile per più processi
1115 accedere in contemporanea allo stesso file, e che le operazioni di lettura e
1116 scrittura possono essere fatte da ogni processo in maniera autonoma in base
1117 ad una posizione corrente nel file che è locale a ciascuno di essi.
1118
1119 Se dal punto di vista della lettura dei dati questo non comporta nessun
1120 problema, quando si andrà a scrivere le operazioni potranno mescolarsi in
1121 maniera imprevedibile.  Il sistema però fornisce in alcuni casi la possibilità
1122 di eseguire alcune operazioni di scrittura in maniera coordinata anche senza
1123 utilizzare meccanismi di sincronizzazione più complessi (come il
1124 \itindex{file~locking} \textit{file locking}, che esamineremo in
1125 sez.~\ref{sec:file_locking}).
1126
1127 Un caso tipico di necessità di accesso condiviso in scrittura è quello in cui
1128 vari processi devono scrivere alla fine di un file (ad esempio un file di
1129 log). Come accennato in sez.~\ref{sec:file_lseek} impostare la posizione alla
1130 fine del file e poi scrivere può condurre ad una \itindex{race~condition}
1131 \textit{race condition}: infatti può succedere che un secondo processo scriva
1132 alla fine del file fra la \func{lseek} e la \func{write}; in questo caso, come
1133 abbiamo appena visto, il file sarà esteso, ma il nostro primo processo avrà
1134 ancora la posizione corrente impostata con la \func{lseek} che non corrisponde
1135 più alla fine del file, e la successiva \func{write} sovrascriverà i dati del
1136 secondo processo.
1137
1138 Il problema è che usare due system call in successione non è un'operazione
1139 atomica; il problema è stato risolto introducendo la modalità
1140 \itindex{append~mode} \const{O\_APPEND}. In questo caso infatti, come abbiamo
1141 descritto in precedenza, è il kernel che aggiorna automaticamente la posizione
1142 alla fine del file prima di effettuare la scrittura, e poi estende il file.
1143 Tutto questo avviene all'interno di una singola system call (la \func{write})
1144 che non essendo interrompibile da un altro processo costituisce un'operazione
1145 atomica.
1146
1147 Un altro caso tipico in cui è necessaria l'atomicità è quello in cui si vuole
1148 creare un \textsl{file di lock} \index{file!di lock}, bloccandosi se il file
1149 esiste. In questo caso la sequenza logica porterebbe a verificare prima
1150 l'esistenza del file con una \func{stat} per poi crearlo con una \func{creat};
1151 di nuovo avremmo la possibilità di una \itindex{race~condition} \textit{race
1152   condition} da parte di un altro processo che crea lo stesso file fra il
1153 controllo e la creazione.
1154
1155 Per questo motivo sono stati introdotti per \func{open} i due flag
1156 \const{O\_CREAT} e \const{O\_EXCL}. In questo modo l'operazione di controllo
1157 dell'esistenza del file (con relativa uscita dalla funzione con un errore) e
1158 creazione in caso di assenza, diventa atomica essendo svolta tutta all'interno
1159 di una singola system call (per i dettagli sull'uso di questa caratteristica
1160 si veda sez.~\ref{sec:ipc_file_lock}).
1161
1162
1163 \subsection{Le funzioni \func{sync} e \func{fsync}}
1164 \label{sec:file_sync}
1165
1166 % TODO, aggiungere syncfs, introdotta con il 2.6.39
1167
1168 Come accennato in sez.~\ref{sec:file_close} tutte le operazioni di scrittura
1169 sono in genere bufferizzate dal kernel, che provvede ad effettuarle in maniera
1170 asincrona (ad esempio accorpando gli accessi alla stessa zona del disco) in un
1171 secondo tempo rispetto al momento della esecuzione della \func{write}.
1172
1173 Per questo motivo, quando è necessaria una sincronizzazione dei dati, il
1174 sistema mette a disposizione delle funzioni che provvedono a forzare lo
1175 scarico dei dati dai buffer del kernel.\footnote{come già accennato neanche
1176   questo dà la garanzia assoluta che i dati siano integri dopo la chiamata,
1177   l'hardware dei dischi è in genere dotato di un suo meccanismo interno di
1178   ottimizzazione per l'accesso al disco che può ritardare ulteriormente la
1179   scrittura effettiva.} La prima di queste funzioni è \funcd{sync} il cui
1180 prototipo è:
1181 \begin{prototype}{unistd.h}{int sync(void)}
1182   
1183   Sincronizza il buffer della cache dei file col disco.
1184   
1185   \bodydesc{La funzione ritorna sempre zero.}
1186 \end{prototype}
1187 \noindent  i vari standard prevedono che la funzione si limiti a far partire
1188 le operazioni, ritornando immediatamente; in Linux (dal kernel 1.3.20) invece
1189 la funzione aspetta la conclusione delle operazioni di sincronizzazione del
1190 kernel.
1191
1192 La funzione viene usata dal comando \cmd{sync} quando si vuole forzare
1193 esplicitamente lo scarico dei dati su disco, o dal demone di sistema
1194 \cmd{update} che esegue lo scarico dei dati ad intervalli di tempo fissi: il
1195 valore tradizionale, usato da BSD, per l'update dei dati è ogni 30 secondi, ma
1196 in Linux il valore utilizzato è di 5 secondi; con le nuove versioni\footnote{a
1197   partire dal kernel 2.2.8} poi, è il kernel che si occupa direttamente di
1198 tutto quanto attraverso il demone interno \cmd{bdflush}, il cui comportamento
1199 può essere controllato attraverso il file \sysctlfile{vm/bdflush} (per
1200 il significato dei valori si può leggere la documentazione allegata al kernel
1201 in \file{Documentation/sysctl/vm.txt}).
1202
1203 Quando si vogliono scaricare soltanto i dati di un file (ad esempio essere
1204 sicuri che i dati di un database sono stati registrati su disco) si possono
1205 usare le due funzioni \funcd{fsync} e \funcd{fdatasync}, i cui prototipi sono:
1206 \begin{functions}
1207   \headdecl{unistd.h}
1208   \funcdecl{int fsync(int fd)}
1209   Sincronizza dati e meta-dati del file \param{fd}
1210   \funcdecl{int fdatasync(int fd)}
1211   Sincronizza i dati del file \param{fd}.
1212   
1213   \bodydesc{La funzione ritorna 0 in caso di successo e $-1$ in caso di
1214     errore, nel qual caso \var{errno} assume i valori:
1215   \begin{errlist}
1216   \item[\errcode{EINVAL}] \param{fd} è un \index{file!speciali} file speciale
1217     che non supporta la sincronizzazione.
1218   \end{errlist}
1219   ed inoltre \errval{EBADF}, \errval{EROFS} e \errval{EIO}.}
1220 \end{functions}
1221
1222 Entrambe le funzioni forzano la sincronizzazione col disco di tutti i dati del
1223 file specificato, ed attendono fino alla conclusione delle operazioni;
1224 \func{fsync} forza anche la sincronizzazione dei meta-dati del file (che
1225 riguardano sia le modifiche alle tabelle di allocazione dei settori, che gli
1226 altri dati contenuti \itindex{inode} nell'inode che si leggono con \func{fstat},
1227 come i tempi del file).
1228
1229 Si tenga presente che questo non comporta la sincronizzazione della
1230 directory che contiene il file (e scrittura della relativa voce su
1231 disco) che deve essere effettuata esplicitamente.\footnote{in realtà per
1232   il filesystem \acr{ext2}, quando lo si monta con l'opzione \cmd{sync},
1233   il kernel provvede anche alla sincronizzazione automatica delle voci
1234   delle directory.}
1235
1236
1237 \subsection{Le funzioni \func{dup} e \func{dup2}}
1238 \label{sec:file_dup}
1239
1240 Abbiamo già visto in sez.~\ref{sec:file_sharing} come un processo figlio
1241 condivida gli stessi file descriptor del padre; è possibile però ottenere un
1242 comportamento analogo all'interno di uno stesso processo \textit{duplicando}
1243 un file descriptor. Per far questo si usa la funzione \funcd{dup} il cui
1244 prototipo è:
1245 \begin{prototype}{unistd.h}{int dup(int oldfd)}
1246   Crea una copia del file descriptor \param{oldfd}.
1247   
1248   \bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
1249     $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei
1250     valori:
1251   \begin{errlist}
1252   \item[\errcode{EBADF}] \param{oldfd} non è un file aperto.
1253   \item[\errcode{EMFILE}] si è raggiunto il numero massimo consentito di file
1254     descriptor aperti.
1255   \end{errlist}}
1256 \end{prototype}
1257
1258 La funzione ritorna, come \func{open}, il primo file descriptor libero. Il
1259 file descriptor è una copia esatta del precedente ed entrambi possono essere
1260 interscambiati nell'uso. Per capire meglio il funzionamento della funzione si
1261 può fare riferimento a fig.~\ref{fig:file_dup}: l'effetto della funzione è
1262 semplicemente quello di copiare il valore nella struttura
1263 \kstruct{file\_struct}, cosicché anche il nuovo file descriptor fa riferimento
1264 alla stessa voce nella \textit{file table}; per questo si dice che il nuovo
1265 file descriptor è \textsl{duplicato}, da cui il nome della funzione.
1266
1267 \begin{figure}[!htb]
1268   \centering \includegraphics[width=14cm]{img/filedup}
1269   \caption{Schema dell'accesso ai file duplicati}
1270   \label{fig:file_dup}
1271 \end{figure}
1272
1273 Si noti che per quanto illustrato in fig.~\ref{fig:file_dup} i file descriptor
1274 duplicati condivideranno eventuali lock, \textit{file status flag}, e
1275 posizione corrente. Se ad esempio si esegue una \func{lseek} per modificare la
1276 posizione su uno dei due file descriptor, essa risulterà modificata anche
1277 sull'altro (dato che quello che viene modificato è lo stesso campo nella voce
1278 della \textit{file table} a cui entrambi fanno riferimento). L'unica
1279 differenza fra due file descriptor duplicati è che ciascuno avrà il suo
1280 \textit{file descriptor flag}; a questo proposito va specificato che nel caso
1281 di \func{dup} il flag di \textit{close-on-exec} \itindex{close-on-exec} (vedi
1282 sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl}) viene sempre cancellato
1283 nella copia.
1284
1285 L'uso principale di questa funzione è per la redirezione dell'input e
1286 dell'output fra l'esecuzione di una \func{fork} e la successiva \func{exec};
1287 diventa così possibile associare un file (o una pipe) allo standard input o
1288 allo standard output (torneremo sull'argomento in sez.~\ref{sec:ipc_pipe_use},
1289 quando tratteremo le pipe). Per fare questo in genere occorre prima chiudere
1290 il file che si vuole sostituire, cosicché il suo file descriptor possa esser
1291 restituito alla chiamata di \func{dup}, come primo file descriptor
1292 disponibile.
1293
1294 Dato che questa è l'operazione più comune, è prevista una diversa versione
1295 della funzione, \funcd{dup2}, che permette di specificare esplicitamente
1296 qual è il valore di file descriptor che si vuole avere come duplicato; il suo
1297 prototipo è:
1298 \begin{prototype}{unistd.h}{int dup2(int oldfd, int newfd)}
1299   
1300   Rende \param{newfd} una copia del file descriptor \param{oldfd}.
1301   
1302   \bodydesc{La funzione ritorna il nuovo file descriptor in caso di successo e
1303     $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
1304   \begin{errlist}
1305   \item[\errcode{EBADF}] \param{oldfd} non è un file aperto o \param{newfd} ha
1306     un valore fuori dall'intervallo consentito per i file descriptor.
1307   \item[\errcode{EMFILE}] si è raggiunto il numero massimo consentito di file
1308     descriptor aperti.
1309   \end{errlist}}
1310 \end{prototype}
1311 \noindent e qualora il file descriptor \param{newfd} sia già aperto (come
1312 avviene ad esempio nel caso della duplicazione di uno dei file standard) esso
1313 sarà prima chiuso e poi duplicato (così che il file duplicato sarà connesso
1314 allo stesso valore per il file descriptor).
1315
1316 La duplicazione dei file descriptor può essere effettuata anche usando la
1317 funzione di controllo dei file \func{fcntl} (che esamineremo in
1318 sez.~\ref{sec:file_fcntl}) con il parametro \const{F\_DUPFD}.  L'operazione ha
1319 la sintassi \code{fcntl(oldfd, F\_DUPFD, newfd)} e se si usa 0 come valore per
1320 \param{newfd} diventa equivalente a \func{dup}. 
1321
1322 La sola differenza fra le due funzioni\footnote{a parte la sintassi ed i
1323   diversi codici di errore.} è che \func{dup2} chiude il file descriptor
1324 \param{newfd} se questo è già aperto, garantendo che la duplicazione sia
1325 effettuata esattamente su di esso, invece \func{fcntl} restituisce il primo
1326 file descriptor libero di valore uguale o maggiore di \param{newfd} (e se
1327 \param{newfd} è aperto la duplicazione avverrà su un altro file descriptor).
1328
1329
1330
1331 \subsection{Le funzioni \func{openat}, \func{mkdirat} e affini}
1332 \label{sec:file_openat}
1333
1334 \itindbeg{at-functions}
1335
1336 Un problema che si pone con l'uso della funzione \func{open}, così come per
1337 molte altre funzioni che accettano come argomenti dei
1338 \itindsub{pathname}{relativo} \textit{pathname} relativi, è che, quando un
1339 \textit{pathname} relativo non fa riferimento alla \index{directory~di~lavoro}
1340 directory di lavoro corrente, è possibile che alcuni dei suoi componenti
1341 vengano modificati in parallelo alla chiamata a \func{open}, e questo lascia
1342 aperta la possibilità di una \itindex{race~condition} \textit{race condition}.
1343
1344 Inoltre come già accennato, la \index{directory~di~lavoro} directory di lavoro
1345 corrente è una proprietà del singolo processo; questo significa che quando si
1346 lavora con i \itindex{thread} \textit{thread} essa sarà la stessa per tutti,
1347 ma esistono molti casi in cui sarebbe invece utile che ogni singolo
1348 \itindex{thread} \textit{thread} avesse la sua \index{directory~di~lavoro}
1349 directory di lavoro.
1350
1351 Per risolvere questi problemi, riprendendo una interfaccia già presente in
1352 Solaris, a fianco delle normali funzioni che operano sui file (come
1353 \func{open}, \func{mkdir}, ecc.) sono state introdotte delle ulteriori
1354 funzioni, dette anche funzioni ``\textit{at}'' in quanto contraddistinte dal
1355 suffisso \texttt{at}, che permettono l'apertura di un file (o le rispettive
1356 altre operazioni) usando un \itindsub{pathname}{relativo} \textit{pathname}
1357 relativo ad una directory specificata.\footnote{l'introduzione è avvenuta su
1358   proposta dello sviluppatore principale delle \acr{glibc} Urlich Drepper; le
1359   corrispondenti system call sono state inserite nel kernel ufficiale a
1360   partire dalla versione 2.6.16, in precedenza era disponibile una emulazione
1361   che, sia pure con prestazioni inferiori, funzionava facendo ricorso all'uso
1362   del filesystem \textit{proc} con l'apertura del file attraverso il
1363   riferimento a \textit{pathname} del tipo di
1364   \texttt{/proc/self/fd/dirfd/relative\_path}.} Benché queste funzioni non
1365 siano presenti negli standard tradizionali esse sono state adottate da vari
1366 Unix\footnote{oltre a Linux e Solaris sono presenti in vari BSD.} fino ad
1367 essere incluse nella recente revisione (la POSIX.1-2008) dello standard
1368 POSIX.1; con le \acr{glibc} per l'accesso a queste funzioni è necessario
1369 definire la macro \macro{\_ATFILE\_SOURCE}.
1370
1371 L'uso di queste funzioni prevede una apertura iniziale della directory che
1372 sarà la base della risoluzione dei \itindsub{pathname}{relativo}
1373 \textit{pathname} relativi che verranno usati in seguito, dopo di che si dovrà
1374 passare il relativo file descriptor alle varie funzioni che useranno quella
1375 directory come punto di partenza per la risoluzione.\footnote{in questo modo,
1376   anche quando si lavora con i \itindex{thread} \textit{thread}, si può
1377   mantenere una \index{directory~di~lavoro} directory di lavoro diversa per
1378   ciascuno di essi.}
1379
1380 Questo metodo, oltre a risolvere i problemi di \itindex{race~condition}
1381 \textit{race condition}, consente anche di ottenere aumenti di prestazioni
1382 significativi quando si devono eseguire molte operazioni su sezioni
1383 dell'albero dei file che prevedono delle gerarchie di sottodirectory molto
1384 profonde; infatti in questo caso basta eseguire la risoluzione del
1385 \textit{pathname} della directory di partenza una sola volta (nell'apertura
1386 iniziale) e non tutte le volte che si deve accedere a ciascun file che essa
1387 contiene.
1388
1389 La sintassi generale di queste nuove funzioni è che esse prevedono come primo
1390 argomento il file descriptor della directory da usare come base, mentre gli
1391 argomenti successivi restano identici a quelli della corrispondente funzione
1392 ordinaria; ad esempio nel caso di \funcd{openat} avremo che essa è definita
1393 come:
1394 \begin{functions}
1395   \headdecl{fcntl.h}
1396   \funcdecl{int openat(int dirfd, const char *pathname, int flags)}
1397   \funcdecl{int openat(int dirfd, const char *pathname, int flags,  mode\_t
1398     mode))} 
1399
1400   Apre un file usando come directory di \index{directory~di~lavoro} lavoro
1401   corrente \param{dirfd}.
1402   
1403   \bodydesc{la funzione restituisce gli stessi valori e gli stessi codici di
1404     errore di \func{open}, ed in più:
1405   \begin{errlist}
1406   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
1407   \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
1408     \textit{pathname} relativo, ma
1409     \param{dirfd} fa riferimento ad un file. 
1410   \end{errlist}}
1411 \end{functions}
1412
1413 Il comportamento delle nuove funzioni è del tutto analogo a quello delle
1414 corrispettive classiche, con la sola eccezione del fatto che se fra i loro
1415 argomenti si utilizza un \itindsub{pathname}{relativo} \textit{pathname}
1416 relativo questo sarà risolto rispetto alla directory indicata
1417 da \param{dirfd}; qualora invece si usi un \itindsub{pathname}{assoluto}
1418 \textit{pathname} assoluto \param{dirfd} verrà semplicemente ignorato. Infine
1419 se per
1420 \param{dirfd} si usa il valore speciale \const{AT\_FDCWD},\footnote{questa,
1421   come le altre costanti \texttt{AT\_*}, è definita in \headfile{fcntl.h},
1422   pertanto se la si vuole usare occorrerà includere comunque questo file,
1423   anche per le funzioni che non sono definite in esso.} la risoluzione sarà
1424 effettuata rispetto alla directory di \index{directory~di~lavoro} lavoro
1425 corrente del processo.
1426
1427 Così come il comportamento, anche i valori di ritorno e le condizioni di
1428 errore delle nuove funzioni sono gli stessi delle funzioni classiche, agli
1429 errori si aggiungono però quelli dovuti a valori errati per \param{dirfd}; in
1430 particolare si avrà un errore di \errcode{EBADF} se esso non è un file
1431 descriptor valido, ed un errore di \errcode{ENOTDIR} se esso non fa
1432 riferimento ad una directory.\footnote{tranne il caso in cui si sia
1433   specificato un \itindsub{pathname}{assoluto} \textit{pathname} assoluto, nel
1434   qual caso, come detto, il valore di \param{dirfd} sarà completamente
1435   ignorato.}
1436
1437 In tab.~\ref{tab:file_atfunc_corr} si sono riportate le funzioni introdotte
1438 con questa nuova interfaccia, con a fianco la corrispondente funzione
1439 classica.\footnote{in realtà, come visto in sez.~\ref{sec:file_temp_file}, le
1440   funzioni \func{utimes} e \func{lutimes} non sono propriamente le
1441   corrispondenti di \func{utimensat}, dato che questa ha una maggiore
1442   precisione nella indicazione dei tempi dei file.} La gran parte di queste
1443 seguono la convenzione appena vista per \func{openat}, in cui agli argomenti
1444 della corrispondente funzione classica viene anteposto
1445 l'argomento \param{dirfd}.\footnote{non staremo pertanto a riportarle una per
1446   una.} Per una parte di queste, indicate dal contenuto della omonima colonna
1447 di tab.~\ref{tab:file_atfunc_corr}, oltre al nuovo argomento iniziale, è
1448 prevista anche l'aggiunta di un ulteriore argomento finale, \param{flags}.
1449
1450 \begin{table}[htb]
1451   \centering
1452   \footnotesize
1453   \begin{tabular}[c]{|l|c|l|}
1454     \hline
1455     \textbf{Funzione} &\textbf{Flags} &\textbf{Corrispondente} \\
1456     \hline
1457     \hline
1458      \func{faccessat} &$\bullet$&\func{access}  \\
1459      \func{fchmodat}  &$\bullet$&\func{chmod}   \\
1460      \func{fchownat}  &$\bullet$&\func{chown},\func{lchown}\\
1461      \func{fstatat}   &$\bullet$&\func{stat},\func{lstat}  \\
1462      \func{utimensat} &$\bullet$&\func{utimes},\func{lutimes}\\
1463      \func{linkat}    &$\bullet$\footnotemark&\func{link}    \\
1464      \funcm{mkdirat}  & --      &\func{mkdir}   \\
1465      \funcm{mknodat}  & --      &\func{mknod}   \\
1466      \func{openat}    & --      &\func{open}    \\
1467      \funcm{readlinkat}& --     &\func{readlink}\\
1468      \funcm{renameat} & --      &\func{rename}  \\
1469      \funcm{symlinkat}& --      &\func{symlink} \\
1470      \func{unlinkat}  &$\bullet$&\func{unlink},\func{rmdir}  \\
1471      \funcm{mkfifoat} & --      &\func{mkfifo}  \\
1472     \hline
1473   \end{tabular}
1474   \caption{Corrispondenze fra le nuove funzioni ``\textit{at}'' e le
1475     corrispettive funzioni classiche.}
1476   \label{tab:file_atfunc_corr}
1477 \end{table}
1478
1479 \footnotetext{in questo caso l'argomento \param{flags} è disponibile ed
1480   utilizzabile solo a partire dal kernel 2.6.18.}
1481
1482 % TODO manca prototipo di fchmodat, verificare se metterlo o metter menzione
1483 % TODO manca prototipo di fstatat, verificare se metterlo o metter menzione
1484 % TODO manca prototipo di linkat, verificare se metterlo o metter menzione
1485 % TODO manca prototipo di utimensat, verificare se metterlo o metter menzione
1486
1487 Per tutte le funzioni che lo prevedono, a parte \func{unlinkat} e
1488 \funcd{faccessat}, l'ulteriore argomento è stato introdotto solo per fornire
1489 un meccanismo con cui modificarne il comportamento nel caso si stia operando
1490 su un collegamento simbolico, così da poter scegliere se far agire la funzione
1491 direttamente sullo stesso o sul file da esso referenziato. Dato che in certi
1492 casi esso può fornire ulteriori indicazioni per modificare il comportamento
1493 delle funzioni, \param{flags} deve comunque essere passato come maschera
1494 binaria, ed impostato usando i valori delle appropriate costanti
1495 \texttt{AT\_*}, definite in \headfile{fcntl.h}.
1496
1497 Come esempio di questo secondo tipo di funzioni possiamo considerare
1498 \funcd{fchownat}, che può essere usata per sostituire sia \func{chown}
1499 che \func{lchown}; il suo prototipo è:
1500 \begin{functions}
1501   \headdecl{unistd.h} \headdecl{fcntl.h} 
1502
1503   \funcdecl{int fchownat(int dirfd, const char *pathname, uid\_t owner, gid\_t
1504     group, int flags)}
1505
1506   Modifica la proprietà di un file.
1507   
1508   \bodydesc{la funzione restituisce gli stessi valori e gli stessi codici di
1509     errore di \func{chown}, ed in più:
1510   \begin{errlist}
1511   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
1512   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
1513   \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
1514     \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. 
1515   \end{errlist}}
1516 \end{functions}
1517
1518 In questo caso il valore di \param{flags} stabilisce il comportamento della
1519 funzione quando la si applica ad un collegamento simbolico, e l'unico valore
1520 utilizzabile è \const{AT\_SYMLINK\_NOFOLLOW}\footnote{in \headfile{fcntl.h} è
1521   definito anche \const{AT\_SYMLINK\_FOLLOW}, che richiede di dereferenziare i
1522   collegamenti simbolici, essendo questo però il comportamento adottato per un
1523   valore nullo di \param{flags} questo valore non viene mai usato.} che se
1524 impostato indica alla funzione di non eseguire la dereferenziazione di un
1525 eventuale collegamento simbolico, facendo comportare \func{fchownat} come
1526 \func{lchown} invece che come \func{chown}.
1527
1528 Come accennato fra tutte quelle marcate in tab.~\ref{tab:file_atfunc_corr}
1529 solo due funzioni possono usare l'argomento \param{flags} con valori diversi
1530 da \const{AT\_SYMLINK\_NOFOLLOW}, la prima di queste è \funcd{faccessat}, ed
1531 il suo prototipo è:
1532 \begin{functions}
1533   \headdecl{unistd.h}
1534   \funcdecl{int faccessat(int dirfd, const char *path, int mode, int flags)}
1535
1536   Controlla i permessi di accesso.
1537   
1538   \bodydesc{la funzione restituisce gli stessi valori e gli stessi codici di
1539     errore di \func{access}, ed in più:
1540   \begin{errlist}
1541   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
1542   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
1543   \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
1544     \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file. 
1545   \end{errlist}}
1546 \end{functions}
1547
1548 La funzione esegue lo stesso controllo di accesso effettuabile con
1549 \func{access}, ma si può utilizzare l'argomento \param{flags} per modificarne
1550 il comportamento rispetto a quello ordinario di \func{access}. In questo caso
1551 esso può essere specificato come maschera binaria di due valori:
1552 \begin{basedescript}{\desclabelwidth{3.0cm}}
1553 \item[\const{AT\_EACCES}] se impostato \funcd{faccessat} esegue il controllo
1554   dei permessi usando l'\ids{UID} effettivo invece di quello reale (il
1555   comportamento di default, che riprende quello di \func{access}).
1556 \item[\const{AT\_SYMLINK\_NOFOLLOW}] se impostato \funcd{faccessat} non esegue
1557   la dereferenziazione dei collegamenti simbolici, effettuando il controllo
1558   dei permessi direttamente sugli stessi.
1559 \end{basedescript}
1560
1561 La seconda eccezione è \func{unlinkat}, in questo caso l'ulteriore
1562 argomento \param{flags} viene utilizzato perché tramite esso la funzione possa
1563 comportarsi sia come analogo di \func{unlink} che di \func{rmdir}; il suo
1564 prototipo è:
1565 \begin{functions}
1566   \headdecl{fcntl.h}
1567   \funcdecl{int unlinkat(int dirfd, const char *pathname, int flags)}
1568
1569   Rimuove una voce da una directory.
1570   
1571   \bodydesc{la funzione restituisce gli stessi valori e gli stessi codici di
1572     errore di \func{unlink} o di \func{rmdir} a seconda del valore di
1573     \param{flags}, ed in più:
1574   \begin{errlist}
1575   \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
1576   \item[\errcode{EINVAL}] \param{flags} non ha un valore valido.
1577   \item[\errcode{ENOTDIR}] \param{pathname} è un \itindsub{pathname}{relativo}
1578     \textit{pathname} relativo, ma \param{dirfd} fa riferimento ad un file.
1579   \end{errlist}}
1580 \end{functions}
1581
1582 Di default il comportamento di \func{unlinkat} è equivalente a quello che
1583 avrebbe \func{unlink} applicata a \param{pathname}, fallendo in tutti i casi
1584 in cui questo è una directory, se però si imposta \param{flags} al valore di
1585 \const{AT\_REMOVEDIR},\footnote{anche se \param{flags} è una maschera binaria,
1586   essendo questo l'unico flag disponibile per questa funzione, lo si può
1587   assegnare direttamente.}  essa si comporterà come \func{rmdir}, in tal
1588 caso \param{pathname} deve essere una directory, che sarà rimossa qualora
1589 risulti vuota.
1590
1591 \itindend{at-functions}
1592
1593
1594 % TODO manca prototipo e motivazione di fexecve, da trattare qui in quanto
1595 % inserita nello stesso standard e da usare con openat, vedi 
1596 % http://pubs.opengroup.org/onlinepubs/9699939699/toc.pdf
1597
1598
1599
1600
1601 \subsection{La funzione \func{fcntl}}
1602 \label{sec:file_fcntl}
1603
1604 Oltre alle operazioni base esaminate in sez.~\ref{sec:file_unix_interface}
1605 esistono tutta una serie di operazioni ausiliarie che è possibile eseguire su
1606 un file descriptor, che non riguardano la normale lettura e scrittura di dati,
1607 ma la gestione sia delle loro proprietà, che di tutta una serie di ulteriori
1608 funzionalità che il kernel può mettere a disposizione.\footnote{ad esempio si
1609   gestiscono con questa funzione varie modalità di I/O asincrono (vedi
1610   sez.~\ref{sec:file_asyncronous_operation}) e il \itindex{file~locking}
1611   \textit{file locking} (vedi sez.~\ref{sec:file_locking}).}
1612
1613 Per queste operazioni di manipolazione e di controllo delle varie proprietà e
1614 caratteristiche di un file descriptor, viene usata la funzione \funcd{fcntl},
1615 il cui prototipo è:
1616 \begin{functions}
1617   \headdecl{unistd.h}
1618   \headdecl{fcntl.h}
1619   \funcdecl{int fcntl(int fd, int cmd)}
1620   \funcdecl{int fcntl(int fd, int cmd, long arg)}
1621   \funcdecl{int fcntl(int fd, int cmd, struct flock * lock)}
1622   Esegue una delle possibili operazioni specificate da \param{cmd}
1623   sul file \param{fd}.
1624   
1625   \bodydesc{La funzione ha valori di ritorno diversi a seconda
1626     dell'operazione. In caso di errore il valore di ritorno è sempre $-1$ ed
1627     il codice dell'errore è restituito nella variabile \var{errno}; i codici
1628     possibili dipendono dal tipo di operazione, l'unico valido in generale è:
1629   \begin{errlist}
1630   \item[\errcode{EBADF}] \param{fd} non è un file aperto.
1631   \end{errlist}}
1632 \end{functions}
1633
1634
1635 Il primo argomento della funzione è sempre il numero di file descriptor
1636 \var{fd} su cui si vuole operare. Il comportamento di questa funzione, il
1637 numero e il tipo degli argomenti, il valore di ritorno e gli eventuali errori
1638 sono determinati dal valore dell'argomento \param{cmd} che in sostanza
1639 corrisponde all'esecuzione di un determinato \textsl{comando}; in
1640 sez.~\ref{sec:file_dup} abbiamo incontrato un esempio dell'uso di \func{fcntl}
1641 per la duplicazione dei file descriptor, una lista di tutti i possibili valori
1642 per \var{cmd} è riportata di seguito:
1643 \begin{basedescript}{\desclabelwidth{2.0cm}}
1644 \item[\const{F\_DUPFD}] trova il primo file descriptor disponibile di valore
1645   maggiore o uguale ad \param{arg} e ne fa una copia di \param{fd}. Ritorna il
1646   nuovo file descriptor in caso di successo e $-1$ in caso di errore. Gli
1647   errori possibili sono \errcode{EINVAL} se \param{arg} è negativo o maggiore
1648   del massimo consentito o \errcode{EMFILE} se il processo ha già raggiunto il
1649   massimo numero di descrittori consentito.
1650 \item[\const{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al
1651   valore specificato con \param{arg}. Al momento l'unico bit usato è quello di
1652   \itindex{close-on-exec} \textit{close-on-exec}, identificato dalla costante
1653   \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
1654   esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}).  Ritorna un
1655   valore nullo in caso di successo e $-1$ in caso di errore.
1656 \item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
1657   \param{fd} o $-1$ in caso di errore; se \const{FD\_CLOEXEC} è impostato i
1658   file descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti
1659   (il comportamento predefinito) restano aperti.
1660 \item[\const{F\_GETFL}] ritorna il valore del \textit{file status flag} in
1661   caso di successo o $-1$ in caso di errore; permette cioè di rileggere quei
1662   bit impostati da \func{open} all'apertura del file che vengono memorizzati
1663   (quelli riportati nella prima e terza sezione di
1664   tab.~\ref{tab:file_open_flags}).
1665 % TODO toglire riferimeto a tabella flag e mettere altro
1666
1667 \item[\const{F\_SETFL}] imposta il \textit{file status flag} al valore
1668   specificato da \param{arg}, ritorna un valore nullo in caso di successo o
1669   $-1$ in caso di errore. Possono essere impostati solo i bit riportati nella
1670   terza sezione di tab.~\ref{tab:file_open_flags}.\footnote{la pagina di
1671     manuale riporta come impostabili solo \const{O\_APPEND},
1672     \const{O\_NONBLOCK} e \const{O\_ASYNC}.}
1673 % TODO toglire riferimeto a tabella flag e mettere altro
1674
1675 \item[\const{F\_GETLK}] richiede un controllo sul file lock specificato da
1676   \param{lock}, sovrascrivendo la struttura da esso puntata con il risultato;
1677   ritorna un valore nullo in caso di successo o $-1$ in caso di errore.  Questa
1678   funzionalità è trattata in dettaglio in sez.~\ref{sec:file_posix_lock}.
1679 \item[\const{F\_SETLK}] richiede o rilascia un file lock a seconda di quanto
1680   specificato nella struttura puntata da \param{lock}. Se il lock è tenuto da
1681   qualcun altro ritorna immediatamente restituendo $-1$ e imposta \var{errno} a
1682   \errcode{EACCES} o \errcode{EAGAIN}, in caso di successo ritorna un valore
1683   nullo. Questa funzionalità è trattata in dettaglio in
1684   sez.~\ref{sec:file_posix_lock}.
1685 \item[\const{F\_SETLKW}] identica a \const{F\_SETLK} eccetto per il fatto che
1686   la funzione non ritorna subito ma attende che il blocco sia rilasciato. Se
1687   l'attesa viene interrotta da un segnale la funzione restituisce $-1$ e
1688   imposta \var{errno} a \errcode{EINTR}, in caso di successo ritorna un valore
1689   nullo.  Questa funzionalità è trattata in dettaglio in
1690   sez.~\ref{sec:file_posix_lock}.
1691 \item[\const{F\_GETOWN}] restituisce il \ids{PID} del processo o
1692   l'identificatore del \itindex{process~group} \textit{process
1693     group}\footnote{i \itindex{process~group} \textit{process group} sono
1694     (vedi sez.~\ref{sec:sess_proc_group}) raggruppamenti di processi usati nel
1695     controllo di sessione; a ciascuno di essi è associato un identificatore
1696     (un numero positivo analogo al \ids{PID}).} che è preposto alla ricezione
1697   dei segnali \signal{SIGIO}\footnote{o qualunque altro segnale alternativo
1698     impostato con \const{F\_FSETSIG}.} per gli eventi associati al file
1699   descriptor \param{fd}\footnote{il segnale viene usato sia per il
1700     \textit{Signal Drive I/O}, che tratteremo in
1701     sez.~\ref{sec:file_asyncronous_operation}, e dai vari meccanismi di
1702     notifica asincrona, che tratteremo in
1703     sez.~\ref{sec:file_asyncronous_lease}.} e \signal{SIGURG} per la notifica
1704   dei dati urgenti di un socket.\footnote{vedi
1705     sez.~\ref{sec:TCP_urgent_data}.} Nel caso di un \textit{process group}
1706   viene restituito un valore negativo il cui valore assoluto corrisponde
1707   all'identificatore del \itindex{process~group} \textit{process group}.  In
1708   caso di errore viene restituito $-1$.
1709 \item[\const{F\_SETOWN}] imposta, con il valore dell'argomento \param{arg},
1710   l'identificatore del processo o del \itindex{process~group} \textit{process
1711     group} che riceverà i segnali \signal{SIGIO}  e \signal{SIGURG} per gli
1712   eventi associati al file descriptor \param{fd}, ritorna un valore nullo in
1713   caso di successo o $-1$ in caso di errore.  Come per \const{F\_GETOWN}, per
1714   impostare un \itindex{process~group} \textit{process group} si deve usare
1715   per \param{arg} un valore negativo, il cui valore assoluto corrisponde
1716   all'identificatore del \itindex{process~group} \textit{process group}.
1717 \item[\const{F\_GETSIG}] restituisce il valore del segnale inviato quando ci
1718   sono dati disponibili in ingresso su un file descriptor aperto ed impostato
1719   per l'I/O asincrono (si veda sez.~\ref{sec:file_asyncronous_io}). Il valore 0
1720   indica il valore predefinito (che è \signal{SIGIO}), un valore diverso da
1721   zero indica il segnale richiesto, (che può essere anche lo stesso
1722   \signal{SIGIO}). In caso di errore ritorna $-1$.
1723 \item[\const{F\_SETSIG}] imposta il segnale da inviare quando diventa
1724   possibile effettuare I/O sul file descriptor in caso di I/O asincrono,
1725   ritorna un valore nullo in caso di successo o $-1$ in caso di errore. Il
1726   valore zero indica di usare il segnale predefinito, \signal{SIGIO}. Un altro
1727   valore diverso da zero (compreso lo stesso \signal{SIGIO}) specifica il
1728   segnale voluto; l'uso di un valore diverso da zero permette inoltre, se si è
1729   installato il gestore del segnale come \var{sa\_sigaction} usando
1730   \const{SA\_SIGINFO}, (vedi sez.~\ref{sec:sig_sigaction}), di rendere
1731   disponibili al gestore informazioni ulteriori riguardo il file che ha
1732   generato il segnale attraverso i valori restituiti in \struct{siginfo\_t}
1733   (come vedremo in sez.~\ref{sec:file_asyncronous_io}).\footnote{i due comandi
1734     \const{F\_SETSIG} e \const{F\_GETSIG} sono una estensione specifica di
1735     Linux.}
1736 \item[\const{F\_SETLEASE}] imposta o rimuove un \itindex{file~lease}
1737   \textit{file lease}\footnote{questa è una nuova funzionalità, specifica di
1738     Linux, e presente solo a partire dai kernel della serie 2.4.x, in cui il
1739     processo che detiene un \textit{lease} su un file riceve una notifica
1740     qualora un altro processo cerca di eseguire una \func{open} o una
1741     \func{truncate} su di esso.} sul file descriptor \var{fd} a seconda del
1742   valore del terzo argomento, che in questo caso è un \ctyp{int}, ritorna un
1743   valore nullo in caso di successo o $-1$ in caso di errore. Questa
1744   funzionalità avanzata è trattata in dettaglio in
1745   sez.~\ref{sec:file_asyncronous_lease}.
1746 \item[\const{F\_GETLEASE}] restituisce il tipo di \itindex{file~lease}
1747   \textit{file lease} che il processo detiene nei confronti del file
1748   descriptor \var{fd} o $-1$ in caso di errore. Con questo comando il terzo
1749   argomento può essere omesso. Questa funzionalità avanzata è trattata in
1750   dettaglio in sez.~\ref{sec:file_asyncronous_lease}.
1751 \item[\const{F\_NOTIFY}] attiva un meccanismo di notifica per cui viene
1752   riportata al processo chiamante, tramite il segnale \signal{SIGIO} (o altro
1753   segnale specificato con \const{F\_SETSIG}) ogni modifica eseguita o
1754   direttamente sulla directory cui \var{fd} fa riferimento, o su uno dei file
1755   in essa contenuti; ritorna un valore nullo in caso di successo o $-1$ in caso
1756   di errore. Questa funzionalità avanzata, disponibile dai kernel della serie
1757   2.4.x, è trattata in dettaglio in sez.~\ref{sec:file_asyncronous_lease}.
1758 \end{basedescript}
1759
1760 La maggior parte delle funzionalità di \func{fcntl} sono troppo avanzate per
1761 poter essere affrontate in tutti i loro aspetti a questo punto; saranno
1762 pertanto riprese più avanti quando affronteremo le problematiche ad esse
1763 relative. In particolare le tematiche relative all'I/O asincrono e ai vari
1764 meccanismi di notifica saranno trattate in maniera esaustiva in
1765 sez.~\ref{sec:file_asyncronous_access} mentre quelle relative al
1766 \itindex{file~locking} \textit{file locking} saranno esaminate in
1767 sez.~\ref{sec:file_locking}). L'uso di questa funzione con i socket verrà
1768 trattato in sez.~\ref{sec:sock_ctrl_func}.
1769
1770 Si tenga presente infine che quando si usa la funzione per determinare le
1771 modalità di accesso con cui è stato aperto il file (attraverso l'uso del
1772 comando \const{F\_GETFL}) è necessario estrarre i bit corrispondenti nel
1773 \textit{file status flag} che si è ottenuto.  Infatti la definizione corrente
1774 di quest'ultimo non assegna bit separati alle tre diverse modalità
1775 \const{O\_RDONLY}, \const{O\_WRONLY} e \const{O\_RDWR}.\footnote{in Linux
1776   queste costanti sono poste rispettivamente ai valori 0, 1 e 2.} Per questo
1777 motivo il valore della modalità di accesso corrente si ottiene eseguendo un
1778 AND binario del valore di ritorno di \func{fcntl} con la maschera
1779 \const{O\_ACCMODE} (anch'essa definita in \headfile{fcntl.h}), che estrae i
1780 bit di accesso dal \textit{file status flag}.
1781
1782
1783
1784 \subsection{La funzione \func{ioctl}}
1785 \label{sec:file_ioctl}
1786
1787 Benché il concetto di \textit{everything is a file} si sia dimostrato molto
1788 valido anche per l'interazione con i dispositivi più vari, fornendo una
1789 interfaccia che permette di interagire con essi tramite le stesse funzioni
1790 usate per i normali file di dati, esisteranno sempre caratteristiche
1791 peculiari, specifiche dell'hardware e della funzionalità che ciascun
1792 dispositivo può provvedere, che non possono venire comprese in questa
1793 interfaccia astratta (un caso tipico è l'impostazione della velocità di una
1794 porta seriale, o le dimensioni di un framebuffer).
1795
1796 Per questo motivo nell'architettura del sistema è stata prevista l'esistenza
1797 di una funzione apposita, \funcd{ioctl}, con cui poter compiere le operazioni
1798 specifiche di ogni dispositivo particolare, usando come riferimento il solito
1799 file descriptor.  Il prototipo di questa funzione è:
1800 \begin{prototype}{sys/ioctl.h}{int ioctl(int fd, int request, ...)}  
1801
1802   Esegue l'operazione di controllo specificata da \param{request} sul file
1803   descriptor \param{fd}.
1804   
1805   \bodydesc{La funzione nella maggior parte dei casi ritorna 0, alcune
1806     operazioni usano però il valore di ritorno per restituire informazioni. In
1807     caso di errore viene sempre restituito $-1$ ed \var{errno} assumerà uno dei
1808     valori:
1809   \begin{errlist}
1810   \item[\errcode{ENOTTY}] il file \param{fd} non è associato con un
1811     dispositivo, o la richiesta non è applicabile all'oggetto a cui fa
1812     riferimento \param{fd}.
1813   \item[\errcode{EINVAL}] gli argomenti \param{request} o \param{argp} non sono
1814     validi.
1815   \end{errlist}
1816   ed inoltre \errval{EBADF} e \errval{EFAULT}.}
1817 \end{prototype}
1818
1819 La funzione serve in sostanza come meccanismo generico per fare tutte quelle
1820 operazioni che non rientrano nell'interfaccia ordinaria della gestione dei
1821 file e che non è possibile effettuare con le funzioni esaminate finora. La
1822 funzione richiede che si passi come primo argomento un file descriptor
1823 regolarmente aperto, e l'operazione da compiere viene selezionata attraverso
1824 il valore dell'argomento \param{request}. Il terzo argomento dipende
1825 dall'operazione prescelta; tradizionalmente è specificato come \code{char *
1826   argp}, da intendersi come puntatore ad un area di memoria
1827 generica,\footnote{all'epoca della creazione di questa funzione infatti ancora
1828   non era stato introdotto il tipo \ctyp{void}.} ma per certe operazioni può
1829 essere omesso, e per altre è un semplice intero.
1830
1831 Normalmente la funzione ritorna zero in caso di successo e $-1$ in caso di
1832 errore, ma per alcune operazione il valore di ritorno, che nel caso viene
1833 impostato ad un valore positivo, può essere utilizzato come parametro di
1834 uscita. È più comune comunque restituire i risultati all'indirizzo puntato dal
1835 terzo argomento.
1836
1837 Data la genericità dell'interfaccia non è possibile classificare in maniera
1838 sistematica le operazioni che si possono gestire con \func{ioctl}, un breve
1839 elenco di alcuni esempi di esse è il seguente:
1840 \begin{itemize*}
1841 \item il cambiamento dei font di un terminale.
1842 \item l'esecuzione di una traccia audio di un CDROM.
1843 \item i comandi di avanti veloce e riavvolgimento di un nastro.
1844 \item il comando di espulsione di un dispositivo rimovibile.
1845 \item l'impostazione della velocità trasmissione di una linea seriale.
1846 \item l'impostazione della frequenza e della durata dei suoni emessi dallo
1847   speaker.
1848 \item l'impostazione degli attributi dei file su un filesystem
1849   ext2.\footnote{i comandi \texttt{lsattr} e \texttt{chattr} fanno questo con
1850     delle \func{ioctl} dedicate, usabili solo su questo filesystem e derivati
1851     successivi (come ext3).}
1852 \end{itemize*}
1853
1854 In generale ogni dispositivo ha un suo insieme di operazioni specifiche
1855 effettuabili attraverso \func{ioctl}, tutte queste sono definite nell'header
1856 file \headfile{sys/ioctl.h}, e devono essere usate solo sui dispositivi cui
1857 fanno riferimento. Infatti anche se in genere i valori di \param{request} sono
1858 opportunamente differenziati a seconda del dispositivo\footnote{il kernel usa
1859   un apposito \textit{magic number} per distinguere ciascun dispositivo nella
1860   definizione delle macro da usare per \param{request}, in modo da essere
1861   sicuri che essi siano sempre diversi, ed il loro uso per dispositivi diversi
1862   causi al più un errore.  Si veda il capitolo quinto di \cite{LinDevDri} per
1863   una trattazione dettagliata dell'argomento.} così che la richiesta di
1864 operazioni relative ad altri dispositivi usualmente provoca il ritorno della
1865 funzione con una condizione di errore, in alcuni casi, relativi a valori
1866 assegnati prima che questa differenziazione diventasse pratica corrente, si
1867 potrebbero usare valori validi anche per il dispositivo corrente, con effetti
1868 imprevedibili o indesiderati.
1869
1870 Data la assoluta specificità della funzione, il cui comportamento varia da
1871 dispositivo a dispositivo, non è possibile fare altro che dare una descrizione
1872 sommaria delle sue caratteristiche; torneremo ad esaminare in
1873 seguito\footnote{per l'uso di \func{ioctl} con i socket si veda
1874   sez.~\ref{sec:sock_ctrl_func}.} quelle relative ad alcuni casi specifici (ad
1875 esempio la gestione dei terminali è effettuata attraverso \func{ioctl} in
1876 quasi tutte le implementazioni di Unix), qui riportiamo solo l'elenco delle
1877 operazioni che sono predefinite per qualunque file,\footnote{in particolare
1878   queste operazioni sono definite nel kernel a livello generale, e vengono
1879   sempre interpretate per prime, per cui, come illustrato in \cite{LinDevDri},
1880   eventuali operazioni specifiche che usino lo stesso valore verrebbero
1881   ignorate.}  caratterizzate dal prefisso \texttt{FIO}:
1882 \begin{basedescript}{\desclabelwidth{2.0cm}}
1883 \item[\const{FIOCLEX}] imposta il flag di \itindex{close-on-exec}
1884   \textit{close-on-exec} sul file, in questo caso, essendo usata come
1885   operazione logica, \func{ioctl} non richiede un terzo argomento, il cui
1886   eventuale valore viene ignorato.
1887 \item[\const{FIONCLEX}] cancella il flag di \itindex{close-on-exec}
1888   \textit{close-on-exec} sul file, in questo caso, essendo usata come
1889   operazione logica, \func{ioctl} non richiede un terzo argomento, il cui
1890   eventuale valore viene ignorato.
1891 \item[\const{FIOASYNC}] abilita o disabilita la modalità di I/O asincrono sul
1892   file (vedi sez.~\ref{sec:file_asyncronous_operation}); il terzo argomento
1893   deve essere un puntatore ad un intero (cioè di tipo \texttt{const int *})
1894   che contiene un valore logico (un valore nullo disabilita, un valore non
1895   nullo abilita).
1896 \item[\const{FIONBIO}] abilita o disabilita sul file l'I/O in modalità non
1897   bloccante; il terzo argomento deve essere un puntatore ad un intero (cioè di
1898   tipo \texttt{const int *}) che contiene un valore logico (un valore nullo
1899   disabilita, un valore non nullo abilita).
1900 \item[\const{FIOSETOWN}] imposta il processo che riceverà i segnali
1901   \signal{SIGURG} e \signal{SIGIO} generati sul file; il terzo argomento deve
1902   essere un puntatore ad un intero (cioè di tipo \texttt{const int *}) il cui
1903   valore specifica il PID del processo.
1904 \item[\const{FIOGETOWN}] legge il processo che riceverà i segnali
1905   \signal{SIGURG} e \signal{SIGIO} generati sul file; il terzo argomento deve
1906   essere un puntatore ad un intero (cioè di tipo \texttt{int *}) su cui sarà
1907   scritto il PID del processo.
1908 \item[\const{FIONREAD}] legge il numero di byte disponibili in lettura sul
1909   file descriptor;\footnote{questa operazione è disponibile solo su alcuni
1910     file descriptor, in particolare sui socket (vedi
1911     sez.~\ref{sec:sock_ioctl_IP}) o sui file descriptor di \textit{epoll}
1912     (vedi sez.~\ref{sec:file_epoll}).} il terzo argomento deve essere un
1913   puntatore ad un intero (cioè di tipo \texttt{int *}) su cui sarà restituito
1914   il valore.
1915 \item[\const{FIOQSIZE}] restituisce la dimensione corrente di un file o di una
1916   directory, mentre se applicata ad un dispositivo fallisce con un errore di
1917   \errcode{ENOTTY}; il terzo argomento deve essere un puntatore ad un intero
1918   (cioè di tipo \texttt{int *}) su cui sarà restituito il valore.
1919 \end{basedescript}
1920
1921 % TODO aggiungere FIBMAP e FIEMAP, vedi http://lwn.net/Articles/260832
1922
1923 Si noti però come la gran parte di queste operazioni specifiche dei file (per
1924 essere precisi le prime sei dell'elenco) siano effettuabili in maniera
1925 generica anche tramite l'uso di \func{fcntl}. Le due funzioni infatti sono
1926 molto simili e la presenza di questa sovrapposizione è principalmente dovuta
1927 al fatto che alle origini di Unix i progettisti considerarono che era
1928 necessario trattare diversamente rispetto alle operazione di controllo delle
1929 modalità di I/O file e dispositivi usando \func{fcntl} per i primi e
1930 \func{ioctl} per i secondi;\footnote{all'epoca tra l'altro i dispositivi che
1931   usavano \func{ioctl} erano sostanzialmente solo i terminali, il che spiega
1932   l'uso comune di \errcode{ENOTTY} come codice di errore.} oggi non è più così
1933 ma le due funzioni sono rimaste.
1934
1935 % TODO trovare qualche posto per la eventuale documentazione delle seguenti
1936 % (bassa/bassissima priorità)
1937 % EXT4_IOC_MOVE_EXT (dal 2.6.31)
1938
1939
1940
1941
1942 % \chapter{}
1943
1944 \section{L'interfaccia standard ANSI C}
1945 \label{sec:files_std_interface}
1946
1947
1948 Come visto in sez.~\ref{sec:file_unix_interface} le operazioni di I/O sui file
1949 sono gestibili a basso livello con l'interfaccia standard unix, che ricorre
1950 direttamente alle \textit{system call} messe a disposizione dal kernel.
1951
1952 Questa interfaccia però non provvede le funzionalità previste dallo standard
1953 ANSI C, che invece sono realizzate attraverso opportune funzioni di libreria,
1954 queste, insieme alle altre funzioni definite dallo standard, vengono a
1955 costituire il nucleo\footnote{queste funzioni sono state implementate la prima
1956   volta da Ritchie nel 1976 e da allora sono rimaste sostanzialmente
1957   immutate.} delle \acr{glibc}.
1958
1959
1960 Esamineremo in questa sezione le funzioni base dell'interfaccia degli
1961 \textit{stream}, analoghe a quelle di sez.~\ref{sec:file_unix_interface} per i
1962 file descriptor. In particolare vedremo come aprire, leggere, scrivere e
1963 cambiare la posizione corrente in uno \textit{stream}.
1964
1965
1966 \subsection{I \textit{file stream}}
1967 \label{sec:file_stream}
1968
1969 \itindbeg{file~stream}
1970
1971 Come più volte ribadito, l'interfaccia dei file descriptor è un'interfaccia di
1972 basso livello, che non provvede nessuna forma di formattazione dei dati e
1973 nessuna forma di bufferizzazione per ottimizzare le operazioni di I/O.
1974
1975 In \cite{APUE} Stevens descrive una serie di test sull'influenza delle
1976 dimensioni del blocco di dati (l'argomento \param{buf} di \func{read} e
1977 \func{write}) nell'efficienza nelle operazioni di I/O con i file descriptor,
1978 evidenziando come le prestazioni ottimali si ottengano a partire da dimensioni
1979 del buffer dei dati pari a quelle dei blocchi del filesystem (il valore dato
1980 dal campo \var{st\_blksize} di \struct{stat}), che di norma corrispondono alle
1981 dimensioni dei settori fisici in cui è suddiviso il disco.
1982
1983 Se il programmatore non si cura di effettuare le operazioni in blocchi di
1984 dimensioni adeguate, le prestazioni sono inferiori.  La caratteristica
1985 principale dell'interfaccia degli \textit{stream} è che essa provvede da sola
1986 alla gestione dei dettagli della bufferizzazione e all'esecuzione delle
1987 operazioni di lettura e scrittura in blocchi di dimensioni appropriate
1988 all'ottenimento della massima efficienza.
1989
1990 Per questo motivo l'interfaccia viene chiamata anche interfaccia dei
1991 \textit{file stream}, dato che non è più necessario doversi preoccupare
1992 dei dettagli della comunicazione con il tipo di hardware sottostante
1993 (come nel caso della dimensione dei blocchi del filesystem), ed un file
1994 può essere sempre considerato come composto da un flusso continuo (da
1995 cui il nome \textit{stream}) di dati.
1996
1997 A parte i dettagli legati alla gestione delle operazioni di lettura e
1998 scrittura (sia per quel che riguarda la bufferizzazione, che le
1999 formattazioni), i \textit{file stream} restano del tutto equivalenti ai file
2000 descriptor (sui quali sono basati), ed in particolare continua a valere quanto
2001 visto in sez.~\ref{sec:file_sharing} a proposito dell'accesso condiviso ed in
2002 sez.~\ref{sec:file_access_control} per il controllo di accesso.
2003
2004 \itindend{file~stream}
2005
2006
2007 \subsection{Gli oggetti \type{FILE}}
2008 \label{sec:file_FILE}
2009
2010
2011 Per ragioni storiche la struttura di dati che rappresenta uno \textit{stream}
2012 è stata chiamata \type{FILE}, questi oggetti sono creati dalle funzioni di
2013 libreria e contengono tutte le informazioni necessarie a gestire le operazioni
2014 sugli \textit{stream}, come la posizione corrente, lo stato del buffer e degli
2015 indicatori di stato e di fine del file.
2016
2017 Per questo motivo gli utenti non devono mai utilizzare direttamente o allocare
2018 queste strutture (che sono dei \index{tipo!opaco} \textsl{tipi opachi}) ma
2019 usare sempre puntatori del tipo \texttt{FILE *} ottenuti dalla libreria stessa
2020 (tanto che in certi casi il termine di puntatore a file è diventato sinonimo
2021 di \textit{stream}).  Tutte le funzioni della libreria che operano sui file
2022 accettano come argomenti solo variabili di questo tipo, che diventa
2023 accessibile includendo l'header file \headfile{stdio.h}.
2024
2025
2026 \subsection{Gli \textit{stream standard}}
2027 \label{sec:file_std_stream}
2028
2029 Ai tre file descriptor standard (vedi tab.~\ref{tab:file_std_files}) aperti
2030 per ogni processo, corrispondono altrettanti \textit{stream}, che
2031 rappresentano i canali standard di input/output prestabiliti; anche questi tre
2032 \textit{stream} sono identificabili attraverso dei nomi simbolici definiti
2033 nell'header \headfile{stdio.h} che sono:
2034
2035 \begin{basedescript}{\desclabelwidth{3.0cm}}
2036 \item[\var{FILE *stdin}] Lo \textit{standard input} cioè il \textit{file
2037     stream} da cui il processo riceve ordinariamente i dati in
2038   ingresso. Normalmente è associato dalla shell all'input del terminale e
2039   prende i caratteri dalla tastiera.
2040 \item[\var{FILE *stdout}] Lo \textit{standard output} cioè il \textit{file
2041     stream} su cui il processo invia ordinariamente i dati in
2042   uscita. Normalmente è associato dalla shell all'output del terminale e
2043   scrive sullo schermo.
2044 \item[\var{FILE *stderr}] Lo \textit{standard error} cioè il \textit{file
2045     stream} su cui il processo è supposto inviare i messaggi di
2046   errore. Normalmente anch'esso è associato dalla shell all'output del
2047   terminale e scrive sullo schermo.
2048 \end{basedescript}
2049
2050 Nella \acr{glibc} \var{stdin}, \var{stdout} e \var{stderr} sono effettivamente
2051 tre variabili di tipo \type{FILE}\texttt{ *} che possono essere usate come
2052 tutte le altre, ad esempio si può effettuare una redirezione dell'output di un
2053 programma con il semplice codice: \includecodesnip{listati/redir_stdout.c} ma
2054 in altri sistemi queste variabili possono essere definite da macro, e se si
2055 hanno problemi di portabilità e si vuole essere sicuri, diventa opportuno
2056 usare la funzione \func{freopen}.
2057
2058
2059 \subsection{Le modalità di bufferizzazione}
2060 \label{sec:file_buffering}
2061
2062 La bufferizzazione è una delle caratteristiche principali dell'interfaccia
2063 degli \textit{stream}; lo scopo è quello di ridurre al minimo il numero di
2064 system call (\func{read} o \func{write}) eseguite nelle operazioni di
2065 input/output. Questa funzionalità è assicurata automaticamente dalla libreria,
2066 ma costituisce anche uno degli aspetti più comunemente fraintesi, in
2067 particolare per quello che riguarda l'aspetto della scrittura dei dati sul
2068 file.
2069
2070 I caratteri che vengono scritti su di uno \textit{stream} normalmente vengono
2071 accumulati in un buffer e poi trasmessi in blocco\footnote{questa operazione
2072   viene usualmente chiamata \textsl{scaricamento} dei dati, dal termine
2073   inglese \textit{flush}.} tutte le volte che il buffer viene riempito, in
2074 maniera asincrona rispetto alla scrittura. Un comportamento analogo avviene
2075 anche in lettura (cioè dal file viene letto un blocco di dati, anche se ne
2076 sono richiesti una quantità inferiore), ma la cosa ovviamente ha rilevanza
2077 inferiore, dato che i dati letti sono sempre gli stessi. In caso di scrittura
2078 invece, quando si ha un accesso contemporaneo allo stesso file (ad esempio da
2079 parte di un altro processo) si potranno vedere solo le parti effettivamente
2080 scritte, e non quelle ancora presenti nel buffer.
2081
2082 Per lo stesso motivo, in tutte le situazioni in cui si sta facendo
2083 dell'input/output interattivo, bisognerà tenere presente le caratteristiche
2084 delle operazioni di scaricamento dei dati, poiché non è detto che ad una
2085 scrittura sullo \textit{stream} corrisponda una immediata scrittura sul
2086 dispositivo (la cosa è particolarmente evidente quando con le operazioni di
2087 input/output su terminale).
2088
2089 Per rispondere ad esigenze diverse, lo standard definisce tre distinte
2090 modalità in cui può essere eseguita la bufferizzazione, delle quali
2091 occorre essere ben consapevoli, specie in caso di lettura e scrittura da
2092 dispositivi interattivi:
2093 \begin{itemize}
2094 \item \textit{unbuffered}: in questo caso non c'è bufferizzazione ed i
2095   caratteri vengono trasmessi direttamente al file non appena possibile
2096   (effettuando immediatamente una \func{write}).
2097 \item \textit{line buffered}: in questo caso i caratteri vengono
2098   normalmente trasmessi al file in blocco ogni volta che viene
2099   incontrato un carattere di \textit{newline} (il carattere ASCII
2100   \verb|\n|).
2101 \item \textit{fully buffered}: in questo caso i caratteri vengono
2102   trasmessi da e verso il file in blocchi di dimensione opportuna.
2103 \end{itemize}
2104
2105 Lo standard ANSI C specifica inoltre che lo standard output e lo
2106 standard input siano aperti in modalità \textit{fully buffered} quando
2107 non fanno riferimento ad un dispositivo interattivo, e che lo standard
2108 error non sia mai aperto in modalità \textit{fully buffered}.
2109
2110 Linux, come BSD e SVr4, specifica il comportamento predefinito in maniera
2111 ancora più precisa, e cioè impone che lo standard error sia sempre
2112 \textit{unbuffered} (in modo che i messaggi di errore siano mostrati il più
2113 rapidamente possibile) e che standard input e standard output siano aperti in
2114 modalità \textit{line buffered} quando sono associati ad un terminale (od
2115 altro dispositivo interattivo) ed in modalità \textit{fully buffered}
2116 altrimenti.
2117
2118 Il comportamento specificato per standard input e standard output vale anche
2119 per tutti i nuovi \textit{stream} aperti da un processo; la selezione comunque
2120 avviene automaticamente, e la libreria apre lo \textit{stream} nella modalità
2121 più opportuna a seconda del file o del dispositivo scelto.
2122
2123 La modalità \textit{line buffered} è quella che necessita di maggiori
2124 chiarimenti e attenzioni per quel che concerne il suo funzionamento. Come già
2125 accennato nella descrizione, \emph{di norma} i dati vengono inviati al kernel
2126 alla ricezione di un carattere di \textsl{a capo} (\textit{newline}); questo
2127 non è vero in tutti i casi, infatti, dato che le dimensioni del buffer usato
2128 dalle librerie sono fisse, se le si eccedono si può avere uno scarico dei dati
2129 anche prima che sia stato inviato un carattere di \textit{newline}.
2130
2131 Un secondo punto da tenere presente, particolarmente quando si ha a che fare
2132 con I/O interattivo, è che quando si effettua una lettura da uno
2133 \textit{stream} che comporta l'accesso al kernel\footnote{questo vuol dire che
2134   lo \textit{stream} da cui si legge è in modalità \textit{unbuffered}.} viene
2135 anche eseguito lo scarico di tutti i buffer degli \textit{stream} in
2136 scrittura.
2137
2138 In sez.~\ref{sec:file_buffering_ctrl} vedremo come la libreria definisca delle
2139 opportune funzioni per controllare le modalità di bufferizzazione e lo scarico
2140 dei dati.
2141
2142
2143
2144
2145 \subsection{Apertura e chiusura di uno \textit{stream}}
2146 \label{sec:file_fopen}
2147
2148 Le funzioni che si possono usare per aprire uno \textit{stream} sono solo tre:
2149 \funcd{fopen}, \funcd{fdopen} e \funcd{freopen},\footnote{\func{fopen} e
2150   \func{freopen} fanno parte dello standard ANSI C, \func{fdopen} è parte
2151   dello standard POSIX.1.} i loro prototipi sono:
2152 \begin{functions}
2153   \headdecl{stdio.h}
2154   \funcdecl{FILE *fopen(const char *path, const char *mode)}
2155   Apre il file specificato da \param{path}.
2156   \funcdecl{FILE *fdopen(int fildes, const char *mode)}
2157   Associa uno \textit{stream} al file descriptor \param{fildes}.
2158   \funcdecl{FILE *freopen(const char *path, const char *mode, FILE *stream)}
2159   Apre il file specificato da \param{path} associandolo allo \textit{stream}
2160   specificato da \param{stream}, se questo è già aperto prima lo chiude.
2161   
2162   \bodydesc{Le funzioni ritornano un puntatore valido in caso di successo e
2163     \val{NULL} in caso di errore, in tal caso \var{errno} assumerà il valore
2164     ricevuto dalla funzione sottostante di cui è fallita l'esecuzione.
2165   
2166     Gli errori pertanto possono essere quelli di \func{malloc} per tutte
2167     e tre le funzioni, quelli \func{open} per \func{fopen}, quelli di
2168     \func{fcntl} per \func{fdopen} e quelli di \func{fopen},
2169     \func{fclose} e \func{fflush} per \func{freopen}.}
2170 \end{functions}
2171
2172 Normalmente la funzione che si usa per aprire uno \textit{stream} è
2173 \func{fopen}, essa apre il file specificato nella modalità specificata da
2174 \param{mode}, che è una stringa che deve iniziare con almeno uno dei valori
2175 indicati in tab.~\ref{tab:file_fopen_mode} (sono possibili varie estensioni
2176 che vedremo in seguito).
2177
2178 L'uso più comune di \func{freopen} è per redirigere uno dei tre file
2179 standard (vedi sez.~\ref{sec:file_std_stream}): il file \param{path} viene
2180 associato a \param{stream} e se questo è uno \textit{stream} già aperto viene
2181 preventivamente chiuso.
2182
2183 Infine \func{fdopen} viene usata per associare uno \textit{stream} ad un file
2184 descriptor esistente ottenuto tramite una altra funzione (ad esempio con una
2185 \func{open}, una \func{dup}, o una \func{pipe}) e serve quando si vogliono
2186 usare gli \textit{stream} con file come le fifo o i socket, che non possono
2187 essere aperti con le funzioni delle librerie standard del C.
2188
2189 \begin{table}[htb]
2190   \centering
2191   \footnotesize
2192   \begin{tabular}[c]{|l|p{8cm}|}
2193     \hline
2194     \textbf{Valore} & \textbf{Significato}\\
2195     \hline
2196     \hline
2197     \texttt{r} & Il file viene aperto, l'accesso viene posto in sola
2198                  lettura, lo \textit{stream} è posizionato all'inizio del
2199                  file.\\ 
2200     \texttt{r+}& Il file viene aperto, l'accesso viene posto in lettura e
2201                  scrittura, lo \textit{stream} è posizionato all'inizio del
2202                  file.\\ 
2203 %    \hline
2204     \texttt{w} & Il file viene aperto e troncato a lunghezza nulla (o
2205                  creato se non esiste), l'accesso viene posto in sola
2206                  scrittura, lo stream\textit{} è posizionato all'inizio del
2207                  file.\\ 
2208     \texttt{w+}& Il file viene aperto e troncato a lunghezza nulla (o
2209                  creato se non esiste), l'accesso viene posto in scrittura e
2210                  lettura, lo \textit{stream} è posizionato all'inizio del
2211                  file.\\ 
2212 %    \hline
2213     \texttt{a} & Il file viene aperto (o creato se non esiste) in
2214                  \itindex{append~mode} \textit{append mode}, l'accesso viene
2215                  posto in sola scrittura.\\
2216     \texttt{a+}& Il file viene aperto (o creato se non esiste) in
2217                  \itindex{append~mode} \textit{append mode}, l'accesso viene
2218                  posto in lettura e scrittura.\\
2219     \hline
2220     \texttt{b} & Specifica che il file è binario, non ha alcun effetto. \\
2221     \texttt{x} & L'apertura fallisce se il file esiste già. \\
2222     \hline
2223   \end{tabular}
2224   \caption{Modalità di apertura di uno \textit{stream} dello standard ANSI C
2225     che sono sempre presenti in qualunque sistema POSIX.}
2226   \label{tab:file_fopen_mode}
2227 \end{table}
2228
2229 In realtà lo standard ANSI C prevede un totale di 15 possibili valori
2230 diversi per \param{mode}, ma in tab.~\ref{tab:file_fopen_mode} si sono
2231 riportati solo i sei valori effettivi, ad essi può essere aggiunto pure
2232 il carattere \texttt{b} (come ultimo carattere o nel mezzo agli altri per
2233 le stringhe di due caratteri) che in altri sistemi operativi serve a
2234 distinguere i file binari dai file di testo; in un sistema POSIX questa
2235 distinzione non esiste e il valore viene accettato solo per
2236 compatibilità, ma non ha alcun effetto.
2237
2238 Le \acr{glibc} supportano alcune estensioni, queste devono essere sempre
2239 indicate dopo aver specificato il \param{mode} con uno dei valori di
2240 tab.~\ref{tab:file_fopen_mode}. L'uso del carattere \texttt{x} serve per
2241 evitare di sovrascrivere un file già esistente (è analoga all'uso
2242 dell'opzione \const{O\_EXCL} in \func{open}), se il file specificato già
2243 esiste e si aggiunge questo carattere a \param{mode} la \func{fopen}
2244 fallisce. 
2245
2246 Un'altra estensione serve a supportare la localizzazione, quando si
2247 aggiunge a \param{mode} una stringa della forma \verb|",ccs=STRING"| il
2248 valore \verb|STRING| è considerato il nome di una codifica dei caratteri
2249 e \func{fopen} marca il file per l'uso dei caratteri estesi e abilita le
2250 opportune funzioni di conversione in lettura e scrittura.
2251
2252 Nel caso si usi \func{fdopen} i valori specificati da \param{mode} devono
2253 essere compatibili con quelli con cui il file descriptor è stato aperto.
2254 Inoltre i modi \cmd{w} e \cmd{w+} non troncano il file. La posizione nello
2255 \textit{stream} viene impostata a quella corrente nel file descriptor, e le
2256 variabili di errore e di fine del file (vedi sez.~\ref{sec:file_io}) sono
2257 cancellate. Il file non viene duplicato e verrà chiuso alla chiusura dello
2258 \textit{stream}.
2259
2260 I nuovi file saranno creati secondo quanto visto in
2261 sez.~\ref{sec:file_ownership_management} ed avranno i permessi di accesso
2262 impostati al valore
2263 \code{S\_IRUSR|S\_IWUSR|S\_IRGRP|S\_IWGRP|S\_IROTH|S\_IWOTH} (pari a
2264 \val{0666}) modificato secondo il valore di \itindex{umask} \textit{umask} per
2265 il processo (si veda sez.~\ref{sec:file_perm_management}).
2266
2267 In caso di file aperti in lettura e scrittura occorre ricordarsi che c'è
2268 di mezzo una bufferizzazione; per questo motivo lo standard ANSI C
2269 richiede che ci sia un'operazione di posizionamento fra un'operazione
2270 di output ed una di input o viceversa (eccetto il caso in cui l'input ha
2271 incontrato la fine del file), altrimenti una lettura può ritornare anche
2272 il risultato di scritture precedenti l'ultima effettuata. 
2273
2274 Per questo motivo è una buona pratica (e talvolta necessario) far seguire ad
2275 una scrittura una delle funzioni \func{fflush}, \func{fseek}, \func{fsetpos} o
2276 \func{rewind} prima di eseguire una rilettura; viceversa nel caso in cui si
2277 voglia fare una scrittura subito dopo aver eseguito una lettura occorre prima
2278 usare una delle funzioni \func{fseek}, \func{fsetpos} o \func{rewind}. Anche
2279 un'operazione nominalmente nulla come \code{fseek(file, 0, SEEK\_CUR)} è
2280 sufficiente a garantire la sincronizzazione.
2281
2282 Una volta aperto lo \textit{stream}, si può cambiare la modalità di
2283 bufferizzazione (si veda sez.~\ref{sec:file_buffering_ctrl}) fintanto che non
2284 si è effettuato alcuna operazione di I/O sul file.
2285
2286 Uno \textit{stream} viene chiuso con la funzione \funcd{fclose} il cui
2287 prototipo è:
2288 \begin{prototype}{stdio.h}{int fclose(FILE *stream)}
2289   Chiude lo \textit{stream} \param{stream}. 
2290   
2291   \bodydesc{Restituisce 0 in caso di successo e \val{EOF} in caso di errore,
2292     nel qual caso imposta \var{errno} a \errval{EBADF} se il file descriptor
2293     indicato da \param{stream} non è valido, o uno dei valori specificati
2294     dalla sottostante funzione che è fallita (\func{close}, \func{write} o
2295     \func{fflush}).}
2296 \end{prototype}
2297
2298 La funzione effettua lo scarico di tutti i dati presenti nei buffer di uscita
2299 e scarta tutti i dati in ingresso; se era stato allocato un buffer per lo
2300 \textit{stream} questo verrà rilasciato. La funzione effettua lo scarico solo
2301 per i dati presenti nei buffer in user space usati dalle \acr{glibc}; se si
2302 vuole essere sicuri che il kernel forzi la scrittura su disco occorrerà
2303 effettuare una \func{sync} (vedi sez.~\ref{sec:file_sync}).
2304
2305 Linux supporta anche una altra funzione, \funcd{fcloseall}, come estensione
2306 GNU implementata dalle \acr{glibc}, accessibile avendo definito
2307 \macro{\_GNU\_SOURCE}, il suo prototipo è:
2308 \begin{prototype}{stdio.h}{int fcloseall(void)}
2309   Chiude tutti gli \textit{stream}. 
2310   
2311   \bodydesc{Restituisce 0 se non ci sono errori ed \val{EOF} altrimenti.}
2312 \end{prototype}
2313 \noindent la funzione esegue lo scarico dei dati bufferizzati in uscita
2314 e scarta quelli in ingresso, chiudendo tutti i file. Questa funzione è
2315 provvista solo per i casi di emergenza, quando si è verificato un errore
2316 ed il programma deve essere abortito, ma si vuole compiere qualche altra
2317 operazione dopo aver chiuso i file e prima di uscire (si ricordi quanto
2318 visto in sez.~\ref{sec:proc_conclusion}).
2319
2320
2321 \subsection{Lettura e scrittura su uno \textit{stream}}
2322 \label{sec:file_io}
2323
2324 Una delle caratteristiche più utili dell'interfaccia degli \textit{stream} è
2325 la ricchezza delle funzioni disponibili per le operazioni di lettura e
2326 scrittura sui file. Sono infatti previste ben tre diverse modalità modalità di
2327 input/output non formattato:
2328 \begin{enumerate*}
2329 \item\textsl{binario} in cui legge/scrive un blocco di dati alla
2330   volta, vedi sez.~\ref{sec:file_binary_io}.
2331 \item\textsl{a caratteri} in cui si legge/scrive un carattere alla
2332   volta (con la bufferizzazione gestita automaticamente dalla libreria),
2333   vedi sez.~\ref{sec:file_char_io}.
2334 \item\textsl{di linea} in cui si legge/scrive una linea alla volta (terminata
2335   dal carattere di newline \verb|'\n'|), vedi sez.~\ref{sec:file_line_io}.
2336 \end{enumerate*}
2337 ed inoltre la modalità di input/output formattato.
2338
2339 A differenza dell'interfaccia dei file descriptor, con gli \textit{stream} il
2340 raggiungimento della fine del file è considerato un errore, e viene
2341 notificato come tale dai valori di uscita delle varie funzioni. Nella
2342 maggior parte dei casi questo avviene con la restituzione del valore
2343 intero (di tipo \ctyp{int}) \val{EOF}\footnote{la costante deve essere
2344   negativa, le \acr{glibc} usano -1, altre implementazioni possono avere
2345   valori diversi.}  definito anch'esso nell'header \headfile{stdlib.h}.
2346
2347 Dato che le funzioni dell'interfaccia degli \textit{stream} sono funzioni di
2348 libreria che si appoggiano a delle system call, esse non impostano
2349 direttamente la variabile \var{errno}, che mantiene il valore impostato dalla
2350 system call che ha riportato l'errore.
2351
2352 Siccome la condizione di end-of-file è anch'essa segnalata come errore, nasce
2353 il problema di come distinguerla da un errore effettivo; basarsi solo sul
2354 valore di ritorno della funzione e controllare il valore di \var{errno}
2355 infatti non basta, dato che quest'ultimo potrebbe essere stato impostato in
2356 una altra occasione, (si veda sez.~\ref{sec:sys_errno} per i dettagli del
2357 funzionamento di \var{errno}).
2358
2359 Per questo motivo tutte le implementazioni delle librerie standard mantengono
2360 per ogni \textit{stream} almeno due flag all'interno dell'oggetto \type{FILE},
2361 il flag di \textit{end-of-file}, che segnala che si è raggiunta la fine del
2362 file in lettura, e quello di errore, che segnala la presenza di un qualche
2363 errore nelle operazioni di input/output; questi due flag possono essere
2364 riletti dalle funzioni \funcd{feof} e \funcd{ferror}, i cui prototipi sono:
2365 \begin{functions}
2366   \headdecl{stdio.h}
2367   \funcdecl{int feof(FILE *stream)}
2368   Controlla il flag di end-of-file di \param{stream}.
2369   \funcdecl{int ferror(FILE *stream)}
2370   Controlla il flag di errore di \param{stream}.
2371   
2372   \bodydesc{Entrambe le funzioni ritornano un valore diverso da zero se
2373     i relativi flag sono impostati.}
2374 \end{functions}
2375 \noindent si tenga presente comunque che la lettura di questi flag segnala
2376 soltanto che c'è stato un errore, o che si è raggiunta la fine del file in una
2377 qualunque operazione sullo \textit{stream}, il controllo quindi deve essere
2378 effettuato ogni volta che si chiama una funzione di libreria.
2379
2380 Entrambi i flag (di errore e di end-of-file) possono essere cancellati usando
2381 la funzione \funcd{clearerr}, il cui prototipo è:
2382 \begin{prototype}{stdio.h}{void clearerr(FILE *stream)}
2383   Cancella i flag di errore ed \textit{end-of-file} di \param{stream}.
2384 \end{prototype}
2385 \noindent in genere si usa questa funzione una volta che si sia identificata e
2386 corretta la causa di un errore per evitare di mantenere i flag attivi, così da
2387 poter rilevare una successiva ulteriore condizione di errore. Di questa
2388 funzione esiste una analoga \funcm{clearerr\_unlocked} che non esegue il
2389 blocco dello \textit{stream} (vedi sez.~\ref{sec:file_stream_thread}).
2390
2391
2392 \subsection{Input/output binario}
2393 \label{sec:file_binary_io}
2394
2395 La prima modalità di input/output non formattato ricalca quella della
2396 interfaccia dei file descriptor, e provvede semplicemente la scrittura e la
2397 lettura dei dati da un buffer verso un file e viceversa. In generale questa è
2398 la modalità che si usa quando si ha a che fare con dati non formattati. Le due
2399 funzioni che si usano per l'I/O binario sono \funcd{fread} ed \funcd{fwrite};
2400 i loro prototipi sono:
2401 \begin{functions}
2402   \headdecl{stdio.h} 
2403   
2404   \funcdecl{size\_t fread(void *ptr, size\_t size, size\_t nmemb, FILE
2405     *stream)}
2406   
2407   \funcdecl{size\_t fwrite(const void *ptr, size\_t size, size\_t
2408     nmemb, FILE *stream)}
2409   
2410   Rispettivamente leggono e scrivono \param{nmemb} elementi di dimensione
2411   \param{size} dal buffer \param{ptr} al file \param{stream}.
2412   
2413   \bodydesc{Entrambe le funzioni ritornano il numero di elementi letti o
2414     scritti, in caso di errore o fine del file viene restituito un numero di
2415     elementi inferiore al richiesto.}
2416 \end{functions}
2417
2418 In genere si usano queste funzioni quando si devono trasferire su file
2419 blocchi di dati binari in maniera compatta e veloce; un primo caso di uso
2420 tipico è quello in cui si salva un vettore (o un certo numero dei suoi
2421 elementi) con una chiamata del tipo:
2422 \includecodesnip{listati/WriteVect.c}
2423 in questo caso devono essere specificate le dimensioni di ciascun
2424 elemento ed il numero di quelli che si vogliono scrivere. Un secondo
2425 caso è invece quello in cui si vuole trasferire su file una struttura;
2426 si avrà allora una chiamata tipo:
2427 \includecodesnip{listati/WriteStruct.c}
2428 in cui si specifica la dimensione dell'intera struttura ed un solo
2429 elemento. 
2430
2431 In realtà quello che conta nel trasferimento dei dati sono le dimensioni
2432 totali, che sono sempre pari al prodotto \code{size * nelem}; la sola
2433 differenza è che le funzioni non ritornano il numero di byte scritti,
2434 ma il numero di elementi.
2435
2436 La funzione \func{fread} legge sempre un numero intero di elementi, se
2437 incontra la fine del file l'oggetto letto parzialmente viene scartato (lo
2438 stesso avviene in caso di errore). In questo caso la posizione dello
2439 \textit{stream} viene impostata alla fine del file (e non a quella
2440 corrispondente alla quantità di dati letti).
2441
2442 In caso di errore (o fine del file per \func{fread}) entrambe le
2443 funzioni restituiscono il numero di oggetti effettivamente letti o
2444 scritti, che sarà inferiore a quello richiesto. Contrariamente a quanto
2445 avviene per i file descriptor, questo segnala una condizione di errore e
2446 occorrerà usare \func{feof} e \func{ferror} per stabilire la natura del
2447 problema.
2448
2449 Benché queste funzioni assicurino la massima efficienza per il
2450 salvataggio dei dati, i dati memorizzati attraverso di esse presentano
2451 lo svantaggio di dipendere strettamente dalla piattaforma di sviluppo
2452 usata ed in genere possono essere riletti senza problemi solo dallo
2453 stesso programma che li ha prodotti.
2454
2455 Infatti diversi compilatori possono eseguire ottimizzazioni diverse delle
2456 strutture dati e alcuni compilatori (come il \cmd{gcc}) possono anche
2457 scegliere se ottimizzare l'occupazione di spazio, impacchettando più
2458 strettamente i dati, o la velocità inserendo opportuni \textit{padding} per
2459 l'allineamento dei medesimi generando quindi output binari diversi. Inoltre
2460 altre incompatibilità si possono presentare quando entrano in gioco differenze
2461 di architettura hardware, come la dimensione del bus o la modalità di
2462 ordinamento dei bit o il formato delle variabili in floating point.
2463
2464 Per questo motivo quando si usa l'input/output binario occorre sempre prendere
2465 le opportune precauzioni (in genere usare un formato di più alto livello che
2466 permetta di recuperare l'informazione completa), per assicurarsi che versioni
2467 diverse del programma siano in grado di rileggere i dati tenendo conto delle
2468 eventuali differenze.
2469
2470 Le \acr{glibc} definiscono altre due funzioni per l'I/O binario,
2471 \funcd{fread\_unlocked} e \funcd{fwrite\_unlocked} che evitano il lock
2472 implicito dello \textit{stream}, usato per dalla librerie per la gestione delle
2473 applicazioni \itindex{thread} \textit{multi-thread} (si veda
2474 sez.~\ref{sec:file_stream_thread} per i dettagli), i loro prototipi sono:
2475 \begin{functions}
2476   \headdecl{stdio.h}
2477   
2478   \funcdecl{size\_t fread\_unlocked(void *ptr, size\_t size, size\_t
2479     nmemb, FILE *stream)}
2480   
2481   \funcdecl{size\_t fwrite\_unlocked(const void *ptr, size\_t size,
2482     size\_t nmemb, FILE *stream)}
2483   
2484   \bodydesc{Le funzioni sono identiche alle analoghe \func{fread} e
2485     \func{fwrite} ma non acquisiscono il lock implicito sullo \textit{stream}.}
2486 \end{functions}
2487 \noindent entrambe le funzioni sono estensioni GNU previste solo dalle
2488 \acr{glibc}.
2489
2490
2491 \subsection{Input/output a caratteri}
2492 \label{sec:file_char_io}
2493
2494 La seconda modalità di input/output è quella a caratteri, in cui si
2495 trasferisce un carattere alla volta.  Le funzioni per la lettura a
2496 caratteri sono tre, \funcd{fgetc}, \funcd{getc} e \funcd{getchar}, i
2497 rispettivi prototipi sono:
2498 \begin{functions}
2499   \headdecl{stdio.h} 
2500
2501   \funcdecl{int getc(FILE *stream)} Legge un byte da \param{stream} e lo
2502   restituisce come intero. In genere è implementata come una macro. 
2503   
2504   \funcdecl{int fgetc(FILE *stream)} Legge un byte da \param{stream} e lo
2505   restituisce come intero. È sempre una funzione.
2506   
2507   \funcdecl{int getchar(void)} Equivalente a \code{getc(stdin)}.
2508   
2509   \bodydesc{Tutte queste funzioni leggono un byte alla volta, che viene
2510     restituito come intero; in caso di errore o fine del file il valore
2511     di ritorno è \val{EOF}.}
2512 \end{functions}
2513
2514 A parte \func{getchar}, che si usa in genere per leggere un carattere da
2515 tastiera, le altre due funzioni sono sostanzialmente equivalenti. La
2516 differenza è che \func{getc} è ottimizzata al massimo e normalmente
2517 viene implementata con una macro, per cui occorre stare attenti a cosa
2518 le si passa come argomento, infatti \param{stream} può essere valutato
2519 più volte nell'esecuzione, e non viene passato in copia con il
2520 meccanismo visto in sez.~\ref{sec:proc_var_passing}; per questo motivo se
2521 si passa un'espressione si possono avere effetti indesiderati.
2522
2523 Invece \func{fgetc} è assicurata essere sempre una funzione, per questo motivo
2524 la sua esecuzione normalmente è più lenta per via dell'overhead della
2525 chiamata, ma è altresì possibile ricavarne l'indirizzo, che può essere passato
2526 come argomento ad un altra funzione (e non si hanno i problemi accennati in
2527 precedenza nel tipo di argomento).
2528
2529 Le tre funzioni restituiscono tutte un \ctyp{unsigned char} convertito
2530 ad \ctyp{int} (si usa \ctyp{unsigned char} in modo da evitare
2531 l'espansione del segno). In questo modo il valore di ritorno è sempre
2532 positivo, tranne in caso di errore o fine del file.
2533
2534 Nelle estensioni GNU che provvedono la localizzazione sono definite tre
2535 funzioni equivalenti alle precedenti, \funcd{getwc}, \funcd{fgetwc} e
2536 \funcd{getwchar}, che invece di un carattere di un byte restituiscono un
2537 carattere in formato esteso (cioè di tipo \ctyp{wint\_t}), il loro prototipo
2538 è:
2539 \begin{functions}
2540   \headdecl{stdio.h} 
2541   \headdecl{wchar.h} 
2542   
2543   \funcdecl{wint\_t getwc(FILE *stream)} Legge un carattere esteso da
2544   \param{stream}. In genere è implementata come una macro.
2545   
2546   \funcdecl{wint\_t fgetwc(FILE *stream)} Legge un carattere esteso da
2547   \param{stream}. È una sempre una funzione.
2548   
2549   \funcdecl{wint\_t getwchar(void)} Equivalente a \code{getwc(stdin)}.
2550   
2551   \bodydesc{Tutte queste funzioni leggono un carattere alla volta, in
2552     caso di errore o fine del file il valore di ritorno è \const{WEOF}.}
2553 \end{functions}
2554
2555 Per scrivere un carattere si possono usare tre funzioni, analoghe alle
2556 precedenti usate per leggere: \funcd{putc}, \funcd{fputc} e \funcd{putchar}; i
2557 loro prototipi sono:
2558 \begin{functions}
2559   \headdecl{stdio.h} 
2560   
2561   \funcdecl{int putc(int c, FILE *stream)} Scrive il carattere \param{c}
2562   su \param{stream}. In genere è implementata come una macro.
2563   
2564   \funcdecl{int fputc(int c, FILE *stream)} Scrive il carattere \param{c} su
2565   \param{stream}. È una sempre una funzione.
2566   
2567   \funcdecl{int putchar(int c)} Equivalente a \code{putc(stdout)}.
2568   
2569   \bodydesc{Le funzioni scrivono sempre un carattere alla volta, il cui
2570     valore viene restituito in caso di successo; in caso di errore o
2571     fine del file il valore di ritorno è \val{EOF}.}
2572 \end{functions}
2573
2574 Tutte queste funzioni scrivono sempre un byte alla volta, anche se prendono
2575 come argomento un \ctyp{int} (che pertanto deve essere ottenuto con un cast da
2576 un \ctyp{unsigned char}). Anche il valore di ritorno è sempre un intero; in
2577 caso di errore o fine del file il valore di ritorno è \val{EOF}.
2578
2579 Come nel caso dell'I/O binario con \func{fread} e \func{fwrite} le \acr{glibc}
2580 provvedono come estensione, per ciascuna delle funzioni precedenti,
2581 un'ulteriore funzione, il cui nome è ottenuto aggiungendo un
2582 \code{\_unlocked}, che esegue esattamente le stesse operazioni, evitando però
2583 il lock implicito dello \textit{stream}.
2584
2585 Per compatibilità con SVID sono inoltre provviste anche due funzioni,
2586 \funcd{getw} e \funcd{putw}, da usare per leggere e scrivere una \textit{word}
2587 (cioè due byte in una volta); i loro prototipi sono:
2588 \begin{functions}
2589   \headdecl{stdio.h} 
2590   
2591   \funcdecl{int getw(FILE *stream)} Legge una parola da \param{stream}.
2592   \funcdecl{int putw(int w, FILE *stream)} Scrive la parola \param{w} su
2593   \param{stream}.
2594   
2595   \bodydesc{Le funzioni restituiscono la parola \param{w}, o \val{EOF}
2596     in caso di errore o di fine del file.}
2597 \end{functions}
2598
2599 Le funzioni leggono e scrivono una \textit{word} di due byte, usando comunque
2600 una variabile di tipo \ctyp{int}; il loro uso è deprecato in favore dell'uso
2601 di \func{fread} e \func{fwrite}, in quanto non è possibile distinguere il
2602 valore -1 da una condizione di errore che restituisce \val{EOF}.
2603
2604 Uno degli usi più frequenti dell'input/output a caratteri è nei programmi di
2605 \textit{parsing} in cui si analizza il testo; in questo contesto diventa utile
2606 poter analizzare il carattere successivo da uno \textit{stream} senza estrarlo
2607 effettivamente (la tecnica è detta \textit{peeking ahead}) in modo che il
2608 programma possa regolarsi avendo dato una \textsl{sbirciatina} a quello che
2609 viene dopo.
2610
2611 Nel nostro caso questo tipo di comportamento può essere realizzato prima
2612 leggendo il carattere, e poi rimandandolo indietro, cosicché ridiventi
2613 disponibile per una lettura successiva; la funzione che inverte la
2614 lettura si chiama \funcd{ungetc} ed il suo prototipo è:
2615 \begin{prototype}{stdio.h}{int ungetc(int c, FILE *stream)}
2616   Rimanda indietro il carattere \param{c}, con un cast a \ctyp{unsigned
2617     char}, sullo \textit{stream} \param{stream}.
2618
2619   \bodydesc{La funzione ritorna \param{c} in caso di successo e
2620   \val{EOF} in caso di errore.}
2621 \end{prototype}
2622 \noindent benché lo standard ANSI C preveda che l'operazione possa
2623 essere ripetuta per un numero arbitrario di caratteri, alle
2624 implementazioni è richiesto di garantire solo un livello; questo è
2625 quello che fa la \acr{glibc}, che richiede che avvenga un'altra
2626 operazione fra due \func{ungetc} successive.
2627
2628 Non è necessario che il carattere che si manda indietro sia l'ultimo che
2629 si è letto, e non è necessario neanche avere letto nessun carattere
2630 prima di usare \func{ungetc}, ma di norma la funzione è intesa per
2631 essere usata per rimandare indietro l'ultimo carattere letto.
2632
2633 Nel caso \param{c} sia un \val{EOF} la funzione non fa nulla, e
2634 restituisce sempre \val{EOF}; così si può usare \func{ungetc} anche
2635 con il risultato di una lettura alla fine del file.
2636
2637 Se si è alla fine del file si può comunque rimandare indietro un
2638 carattere, il flag di end-of-file verrà automaticamente cancellato
2639 perché c'è un nuovo carattere disponibile che potrà essere riletto
2640 successivamente.
2641
2642 Infine si tenga presente che \func{ungetc} non altera il contenuto del
2643 file, ma opera esclusivamente sul buffer interno. Se si esegue una
2644 qualunque delle operazioni di riposizionamento (vedi
2645 sez.~\ref{sec:file_fseek}) i caratteri rimandati indietro vengono
2646 scartati.
2647
2648
2649 \subsection{Input/output di linea}
2650 \label{sec:file_line_io}
2651
2652 La terza ed ultima modalità di input/output non formattato è quella di linea,
2653 in cui si legge o si scrive una riga alla volta; questa è una modalità molto
2654 usata per l'I/O da terminale, ma è anche quella che presenta le
2655 caratteristiche più controverse.
2656
2657 Le funzioni previste dallo standard ANSI C per leggere una linea sono
2658 sostanzialmente due, \funcd{gets} e \funcd{fgets}, i cui rispettivi
2659 prototipi sono:
2660 \begin{functions}
2661   \headdecl{stdio.h} 
2662   
2663   \funcdecl{char *gets(char *string)} Scrive su \param{string} una
2664   linea letta da \var{stdin}.
2665   
2666   \funcdecl{char *fgets(char *string, int size, FILE *stream)}
2667   Scrive su \param{string} la linea letta da \param{stream} per un
2668   massimo di \param{size} byte.
2669   
2670   \bodydesc{Le funzioni restituiscono l'indirizzo \param{string} in caso
2671     di successo o \val{NULL} in caso di errore.}
2672 \end{functions}
2673
2674 Entrambe le funzioni effettuano la lettura (dal file specificato \func{fgets},
2675 dallo standard input \func{gets}) di una linea di caratteri (terminata dal
2676 carattere \textit{newline}, \verb|'\n'|, quello mappato sul tasto di ritorno a
2677 capo della tastiera), ma \func{gets} sostituisce \verb|'\n'| con uno zero,
2678 mentre \func{fgets} aggiunge uno zero dopo il \textit{newline}, che resta
2679 dentro la stringa. Se la lettura incontra la fine del file (o c'è un errore)
2680 viene restituito un \val{NULL}, ed il buffer \param{buf} non viene toccato.
2681 L'uso di \func{gets} è deprecato e deve essere assolutamente evitato; la
2682 funzione infatti non controlla il numero di byte letti, per cui nel caso la
2683 stringa letta superi le dimensioni del buffer, si avrà un
2684 \itindex{buffer~overflow} \textit{buffer overflow}, con sovrascrittura della
2685 memoria del processo adiacente al buffer.\footnote{questa tecnica è spiegata
2686   in dettaglio e con molta efficacia nell'ormai famoso articolo di Aleph1
2687   \cite{StS}.}
2688
2689 Questa è una delle vulnerabilità più sfruttate per guadagnare accessi non
2690 autorizzati al sistema (i cosiddetti \textit{exploit}), basta infatti inviare
2691 una stringa sufficientemente lunga ed opportunamente forgiata per
2692 sovrascrivere gli indirizzi di ritorno nello \itindex{stack} \textit{stack}
2693 (supposto che la \func{gets} sia stata chiamata da una subroutine), in modo da
2694 far ripartire l'esecuzione nel codice inviato nella stringa stessa (in genere
2695 uno \textit{shell code} cioè una sezione di programma che lancia una shell).
2696
2697 La funzione \func{fgets} non ha i precedenti problemi di \func{gets} in quanto
2698 prende in input la dimensione del buffer \param{size}, che non verrà mai
2699 ecceduta in lettura. La funzione legge fino ad un massimo di \param{size}
2700 caratteri (newline compreso), ed aggiunge uno zero di terminazione; questo
2701 comporta che la stringa possa essere al massimo di \code{size-1} caratteri.  Se
2702 la linea eccede la dimensione del buffer verranno letti solo \code{size-1}
2703 caratteri, ma la stringa sarà sempre terminata correttamente con uno zero
2704 finale; sarà possibile leggere i rimanenti caratteri in una chiamata
2705 successiva.
2706
2707 Per la scrittura di una linea lo standard ANSI C prevede altre due
2708 funzioni, \funcd{fputs} e \funcd{puts}, analoghe a quelle di lettura, i
2709 rispettivi prototipi sono:
2710 \begin{functions}
2711   \headdecl{stdio.h} 
2712   
2713   \funcdecl{int puts(const char *string)} Scrive su \var{stdout} la
2714   linea \param{string}.
2715   
2716   \funcdecl{int fputs(const char *string, FILE *stream)} Scrive su
2717   \param{stream} la linea \param{string}.
2718   
2719   \bodydesc{Le funzioni restituiscono un valore non negativo in caso di
2720     successo o \val{EOF} in caso di errore.}
2721 \end{functions}
2722
2723 Dato che in questo caso si scrivono i dati in uscita \func{puts} non ha i
2724 problemi di \func{gets} ed è in genere la forma più immediata per scrivere
2725 messaggi sullo standard output; la funzione prende una stringa terminata da
2726 uno zero ed aggiunge automaticamente il ritorno a capo. La differenza con
2727 \func{fputs} (a parte la possibilità di specificare un file diverso da
2728 \var{stdout}) è che quest'ultima non aggiunge il newline, che deve essere
2729 previsto esplicitamente.
2730
2731 Come per le analoghe funzioni di input/output a caratteri, anche per l'I/O di
2732 linea esistono delle estensioni per leggere e scrivere linee di caratteri
2733 estesi, le funzioni in questione sono \funcd{fgetws} e \funcd{fputws} ed i
2734 loro prototipi sono:
2735 \begin{functions}
2736   \headdecl{wchar.h} 
2737   \funcdecl{wchar\_t *fgetws(wchar\_t *ws, int n, FILE *stream)}
2738   Legge un massimo di \param{n} caratteri estesi dal file
2739   \param{stream} al buffer \param{ws}.
2740   
2741   \funcdecl{int fputws(const wchar\_t *ws, FILE *stream)} Scrive la
2742   linea \param{ws} di caratteri estesi sul file \param{stream}.
2743   
2744   \bodydesc{Le funzioni ritornano rispettivamente \param{ws} o un numero
2745     non negativo in caso di successo e \val{NULL} o \val{EOF} in
2746     caso di errore o fine del file.}
2747 \end{functions}
2748
2749 Il comportamento di queste due funzioni è identico a quello di \func{fgets} e
2750 \func{fputs}, a parte il fatto che tutto (numero di caratteri massimo,
2751 terminatore della stringa, newline) è espresso in termini di caratteri estesi
2752 anziché di normali caratteri ASCII.
2753
2754 Come per l'I/O binario e quello a caratteri, anche per l'I/O di linea le
2755 \acr{glibc} supportano una serie di altre funzioni, estensioni di tutte quelle
2756 illustrate finora (eccetto \func{gets} e \func{puts}), che eseguono
2757 esattamente le stesse operazioni delle loro equivalenti, evitando però il lock
2758 implicito dello \textit{stream} (vedi sez.~\ref{sec:file_stream_thread}). Come
2759 per le altre forma di I/O, dette funzioni hanno lo stesso nome della loro
2760 analoga normale, con l'aggiunta dell'estensione \code{\_unlocked}.
2761
2762 Come abbiamo visto, le funzioni di lettura per l'input/output di linea
2763 previste dallo standard ANSI C presentano svariati inconvenienti. Benché
2764 \func{fgets} non abbia i gravissimi problemi di \func{gets}, può
2765 comunque dare risultati ambigui se l'input contiene degli zeri; questi
2766 infatti saranno scritti sul buffer di uscita e la stringa in output
2767 apparirà come più corta dei byte effettivamente letti. Questa è una
2768 condizione che è sempre possibile controllare (deve essere presente un
2769 newline prima della effettiva conclusione della stringa presente nel
2770 buffer), ma a costo di una complicazione ulteriore della logica del
2771 programma. Lo stesso dicasi quando si deve gestire il caso di stringa
2772 che eccede le dimensioni del buffer.
2773
2774 Per questo motivo le \acr{glibc} prevedono, come estensione GNU, due nuove
2775 funzioni per la gestione dell'input/output di linea, il cui uso permette di
2776 risolvere questi problemi. L'uso di queste funzioni deve essere attivato
2777 definendo la macro \macro{\_GNU\_SOURCE} prima di includere
2778 \headfile{stdio.h}. La prima delle due, \funcd{getline}, serve per leggere una
2779 linea terminata da un newline, esattamente allo stesso modo di \func{fgets},
2780 il suo prototipo è:
2781 \begin{prototype}{stdio.h}
2782   {ssize\_t getline(char **buffer, size\_t *n, FILE *stream)} Legge una linea
2783   dal file \param{stream} copiandola sul buffer indicato da \param{buffer}
2784   riallocandolo se necessario (l'indirizzo del buffer e la sua dimensione
2785   vengono sempre riscritte).
2786
2787   \bodydesc{La funzione ritorna il numero di caratteri letti in caso di
2788   successo e -1 in caso di errore o di raggiungimento della fine del
2789   file.}
2790 \end{prototype}
2791
2792 La funzione permette di eseguire una lettura senza doversi preoccupare della
2793 eventuale lunghezza eccessiva della stringa da leggere. Essa prende come primo
2794 argomento l'indirizzo del puntatore al buffer su cui si vuole copiare la
2795 linea. Quest'ultimo \emph{deve} essere stato allocato in precedenza con una
2796 \func{malloc} (non si può passare l'indirizzo di un puntatore ad una variabile
2797 locale); come secondo argomento la funzione vuole l'indirizzo della variabile
2798 contenente le dimensioni del buffer suddetto.
2799
2800 Se il buffer di destinazione è sufficientemente ampio la stringa viene scritta
2801 subito, altrimenti il buffer viene allargato usando \func{realloc} e la nuova
2802 dimensione ed il nuovo puntatore vengono restituiti indietro (si noti infatti
2803 come per entrambi gli argomenti si siano usati dei
2804 \itindex{value~result~argument} \textit{value result argument}, passando dei
2805 puntatori anziché i valori delle variabili, secondo la tecnica spiegata in
2806 sez.~\ref{sec:proc_var_passing}).
2807
2808 Se si passa alla funzione l'indirizzo di un puntatore impostato a \val{NULL} e
2809 \var{*n} è zero, la funzione provvede da sola all'allocazione della memoria
2810 necessaria a contenere la linea. In tutti i casi si ottiene dalla funzione un
2811 puntatore all'inizio del testo della linea letta. Un esempio di codice può
2812 essere il seguente: 
2813 \includecodesnip{listati/getline.c} 
2814 e per evitare  \itindex{memory~leak} \textit{memory leak} occorre ricordarsi di
2815 liberare \var{ptr} con una \func{free}.
2816
2817 Il valore di ritorno della funzione indica il numero di caratteri letti
2818 dallo \textit{stream} (quindi compreso il newline, ma non lo zero di
2819 terminazione); questo permette anche di distinguere eventuali zeri letti
2820 dallo \textit{stream} da quello inserito dalla funzione per terminare la linea.
2821 Se si è alla fine del file e non si è potuto leggere nulla o c'è stato
2822 un errore la funzione restituisce -1.
2823
2824 La seconda estensione GNU è una generalizzazione di \func{getline} per
2825 poter usare come separatore un carattere qualsiasi, la funzione si
2826 chiama \funcd{getdelim} ed il suo prototipo è:
2827 \begin{prototype}{stdio.h}
2828 {ssize\_t getdelim(char **buffer, size\_t *n, int delim, FILE *stream)} 
2829   Identica a \func{getline} solo che usa \param{delim} al posto del
2830   carattere di newline come separatore di linea.
2831 \end{prototype}
2832
2833 Il comportamento di \func{getdelim} è identico a quello di \func{getline} (che
2834 può essere implementata da questa passando \verb|'\n'| come valore di
2835 \param{delim}).
2836
2837
2838 \subsection{L'input/output formattato}
2839 \label{sec:file_formatted_io}
2840
2841 L'ultima modalità di input/output è quella formattata, che è una delle
2842 caratteristiche più utilizzate delle librerie standard del C; in genere questa
2843 è la modalità in cui si esegue normalmente l'output su terminale poiché
2844 permette di stampare in maniera facile e veloce dati, tabelle e messaggi.
2845
2846 L'output formattato viene eseguito con una delle 13 funzioni della famiglia
2847 \func{printf}; le tre più usate sono \funcd{printf}, \funcd{fprintf} e
2848 \funcd{sprintf}, i cui prototipi sono:
2849 \begin{functions}
2850   \headdecl{stdio.h} 
2851   \funcdecl{int printf(const char *format, ...)} Stampa su \file{stdout}
2852   gli argomenti, secondo il formato specificato da \param{format}.
2853   
2854   \funcdecl{int fprintf(FILE *stream, const char *format, ...)}  Stampa
2855   su \param{stream} gli argomenti, secondo il formato specificato da
2856   \param{format}.
2857   
2858   \funcdecl{int sprintf(char *str, const char *format, ...)} Stampa
2859   sulla stringa \param{str} gli argomenti, secondo il formato
2860   specificato da \param{format}.
2861
2862   \bodydesc{Le funzioni ritornano il numero di caratteri stampati.}
2863 \end{functions}
2864 \noindent le prime due servono per stampare su file (lo standard output o
2865 quello specificato) la terza permette di stampare su una stringa, in genere
2866 l'uso di \func{sprintf} è sconsigliato in quanto è possibile, se non si ha la
2867 sicurezza assoluta sulle dimensioni del risultato della stampa, eccedere le
2868 dimensioni di \param{str}, con conseguente sovrascrittura di altre variabili e
2869 possibili \itindex{buffer~overflow} \textit{buffer overflow}; per questo
2870 motivo si consiglia l'uso dell'alternativa \funcd{snprintf}, il cui prototipo
2871 è:
2872 \begin{prototype}{stdio.h}
2873 {snprintf(char *str, size\_t size, const char *format, ...)} 
2874   Identica a \func{sprintf}, ma non scrive su \param{str} più di
2875   \param{size} caratteri.
2876 \end{prototype}
2877
2878 La parte più complessa delle funzioni di scrittura formattata è il formato
2879 della stringa \param{format} che indica le conversioni da fare, e da cui
2880 deriva anche il numero degli argomenti che dovranno essere passati a seguire
2881 (si noti come tutte queste funzioni siano \index{funzioni!variadic}
2882 \textit{variadic}, prendendo un numero di argomenti variabile che dipende
2883 appunto da quello che si è specificato in \param{format}).
2884
2885 \begin{table}[htb]
2886   \centering
2887   \footnotesize
2888   \begin{tabular}[c]{|l|l|p{10cm}|}
2889     \hline
2890     \textbf{Valore} & \textbf{Tipo} & \textbf{Significato} \\
2891     \hline
2892     \hline
2893    \cmd{\%d} &\ctyp{int}         & Stampa un numero intero in formato decimale
2894                                    con segno.\\
2895    \cmd{\%i} &\ctyp{int}         & Identico a \cmd{\%i} in output.\\
2896    \cmd{\%o} &\ctyp{unsigned int}& Stampa un numero intero come ottale.\\
2897    \cmd{\%u} &\ctyp{unsigned int}& Stampa un numero intero in formato
2898                                    decimale senza segno.\\
2899    \cmd{\%x}, 
2900    \cmd{\%X} &\ctyp{unsigned int}& Stampano un intero in formato esadecimale,
2901                                    rispettivamente con lettere minuscole e
2902                                    maiuscole.\\
2903    \cmd{\%f} &\ctyp{double}      & Stampa un numero in virgola mobile con la
2904                                    notazione a virgola fissa.\\
2905    \cmd{\%e}, 
2906    \cmd{\%E} &\ctyp{double} & Stampano un numero in virgola mobile con la
2907                               notazione esponenziale, rispettivamente con
2908                               lettere minuscole e maiuscole.\\
2909    \cmd{\%g}, 
2910    \cmd{\%G} &\ctyp{double} & Stampano un numero in virgola mobile con la
2911                               notazione più appropriate delle due precedenti,
2912                               rispettivamente con lettere minuscole e
2913                               maiuscole.\\
2914    \cmd{\%a}, 
2915    \cmd{\%A} &\ctyp{double} & Stampano un numero in virgola mobile in
2916                               notazione esadecimale frazionaria.\\
2917    \cmd{\%c} &\ctyp{int}    & Stampa un carattere singolo.\\
2918    \cmd{\%s} &\ctyp{char *} & Stampa una stringa.\\
2919    \cmd{\%p} &\ctyp{void *} & Stampa il valore di un puntatore.\\
2920    \cmd{\%n} &\ctyp{\&int}  & Prende il numero di caratteri stampati finora.\\
2921    \cmd{\%\%}&              & Stampa un \%.\\
2922     \hline
2923   \end{tabular}
2924   \caption{Valori possibili per gli specificatori di conversione in una
2925     stringa di formato di \func{printf}.} 
2926   \label{tab:file_format_spec}
2927 \end{table}
2928
2929 La stringa è costituita da caratteri normali (tutti eccetto \texttt{\%}), che
2930 vengono passati invariati all'output, e da direttive di conversione, in cui
2931 devono essere sempre presenti il carattere \texttt{\%}, che introduce la
2932 direttiva, ed uno degli specificatori di conversione (riportati in
2933 tab.~\ref{tab:file_format_spec}) che la conclude.
2934
2935 \begin{table}[htb]
2936   \centering
2937   \footnotesize
2938   \begin{tabular}[c]{|l|p{10cm}|}
2939     \hline
2940     \textbf{Valore} & \textbf{Significato}\\
2941     \hline
2942     \hline
2943     \val{\#} & Chiede la conversione in forma alternativa. \\
2944     \val{0}  & La conversione è riempita con zeri alla sinistra del valore.\\
2945     \val{-}  & La conversione viene allineata a sinistra sul bordo del campo.\\
2946     \val{' '}& Mette uno spazio prima di un numero con segno di valore 
2947                positivo.\\
2948     \val{+}  & Mette sempre il segno ($+$ o $-$) prima di un numero.\\
2949     \hline
2950   \end{tabular}
2951   \caption{I valori dei flag per il formato di \func{printf}}
2952   \label{tab:file_format_flag}
2953 \end{table}
2954
2955 Il formato di una direttiva di conversione prevede una serie di possibili
2956 elementi opzionali oltre al \cmd{\%} e allo specificatore di conversione. In
2957 generale essa è sempre del tipo:
2958 \begin{center}
2959 \begin{verbatim}
2960 % [n. parametro $] [flag] [[larghezza] [. precisione]] [tipo] conversione
2961 \end{verbatim}
2962 \end{center}
2963 in cui tutti i valori tranne il \val{\%} e lo specificatore di conversione
2964 sono opzionali (e per questo sono indicati fra parentesi quadre); si possono
2965 usare più elementi opzionali, nel qual caso devono essere specificati in
2966 questo ordine:
2967 \begin{itemize*}
2968 \item uno specificatore del parametro da usare (terminato da un \val{\$}),
2969 \item uno o più flag (i cui valori possibili sono riassunti in
2970   tab.~\ref{tab:file_format_flag}) che controllano il formato di stampa della
2971   conversione,
2972 \item uno specificatore di larghezza (un numero decimale), eventualmente
2973   seguito (per i numeri in virgola mobile) da un specificatore di precisione
2974   (un altro numero decimale),
2975 \item uno specificatore del tipo di dato, che ne indica la dimensione (i cui
2976   valori possibili sono riassunti in tab.~\ref{tab:file_format_type}).
2977 \end{itemize*}
2978
2979
2980 Dettagli ulteriori sulle varie opzioni possono essere trovati nella pagina di
2981 manuale di \func{printf} e nella documentazione delle \acr{glibc}.
2982
2983 \begin{table}[htb]
2984   \centering
2985   \footnotesize
2986   \begin{tabular}[c]{|l|p{10cm}|}
2987     \hline
2988     \textbf{Valore} & \textbf{Significato} \\
2989     \hline
2990     \hline
2991     \cmd{hh} & Una conversione intera corrisponde a un \ctyp{char} con o senza
2992                segno, o il puntatore per il numero dei parametri \cmd{n} è di 
2993                tipo \ctyp{char}.\\
2994     \cmd{h}  & Una conversione intera corrisponde a uno \ctyp{short} con o 
2995                senza segno, o il puntatore per il numero dei parametri \cmd{n}
2996                è di tipo \ctyp{short}.\\
2997     \cmd{l}  & Una conversione intera corrisponde a un \ctyp{long} con o 
2998                senza segno, o il puntatore per il numero dei parametri \cmd{n}
2999                è di tipo \ctyp{long}, o il carattere o la stringa seguenti
3000                sono in formato esteso.\\ 
3001     \cmd{ll} & Una conversione intera corrisponde a un \ctyp{long long} con o 
3002                senza segno, o il puntatore per il numero dei parametri \cmd{n}
3003                è di tipo \ctyp{long long}.\\
3004     \cmd{L}  & Una conversione in virgola mobile corrisponde a un
3005                \ctyp{double}.\\
3006     \cmd{q}  & Sinonimo di \cmd{ll}.\\
3007     \cmd{j}  & Una conversione intera corrisponde a un \type{intmax\_t} o 
3008                \type{uintmax\_t}.\\
3009     \cmd{z}  & Una conversione intera corrisponde a un \type{size\_t} o 
3010                \type{ssize\_t}.\\
3011     \cmd{t}  & Una conversione intera corrisponde a un \type{ptrdiff\_t}.\\
3012     \hline
3013   \end{tabular}
3014   \caption{Il modificatore di tipo di dato per il formato di \func{printf}}
3015   \label{tab:file_format_type}
3016 \end{table}
3017
3018 Una versione alternativa delle funzioni di output formattato, che permettono
3019 di usare il puntatore ad una lista variabile \index{funzioni!variadic} di
3020 argomenti (vedi sez.~\ref{sec:proc_variadic}), sono \funcd{vprintf},
3021 \funcd{vfprintf} e \funcd{vsprintf}, i cui prototipi sono:
3022 \begin{functions}
3023   \headdecl{stdio.h} 
3024   
3025   \funcdecl{int vprintf(const char *format, va\_list ap)} Stampa su
3026   \var{stdout} gli argomenti della lista \param{ap}, secondo il formato
3027   specificato da \param{format}.
3028   
3029   \funcdecl{int vfprintf(FILE *stream, const char *format, va\_list ap)}
3030   Stampa su \param{stream} gli argomenti della lista \param{ap}, secondo il
3031   formato specificato da \param{format}.
3032   
3033   \funcdecl{int vsprintf(char *str, const char *format, va\_list ap)} Stampa
3034   sulla stringa \param{str} gli argomenti della lista \param{ap}, secondo il
3035   formato specificato da \param{format}.
3036
3037   \bodydesc{Le funzioni ritornano il numero di caratteri stampati.}
3038 \end{functions}
3039 \noindent con queste funzioni diventa possibile selezionare gli argomenti che
3040 si vogliono passare ad una funzione di stampa, passando direttamente la lista
3041 tramite l'argomento \param{ap}. Per poter far questo ovviamente la lista
3042 variabile\index{funzioni!variadic} degli argomenti dovrà essere opportunamente
3043 trattata (l'argomento è esaminato in sez.~\ref{sec:proc_variadic}), e dopo
3044 l'esecuzione della funzione l'argomento
3045 \param{ap} non sarà più utilizzabile (in generale dovrebbe essere eseguito un
3046 \code{va\_end(ap)} ma in Linux questo non è necessario). 
3047
3048 Come per \func{sprintf} anche per \func{vsprintf} esiste una analoga
3049 \funcd{vsnprintf} che pone un limite sul numero di caratteri che vengono
3050 scritti sulla stringa di destinazione:
3051 \begin{prototype}{stdio.h}
3052 {vsnprintf(char *str, size\_t size, const char *format, va\_list ap)} 
3053   Identica a \func{vsprintf}, ma non scrive su \param{str} più di
3054   \param{size} caratteri.
3055 \end{prototype}
3056 \noindent in modo da evitare possibili \itindex{buffer~overflow} buffer
3057 overflow.
3058
3059
3060 Per eliminare alla radice questi problemi, le \acr{glibc} supportano una
3061 specifica estensione GNU che alloca dinamicamente tutto lo spazio necessario;
3062 l'estensione si attiva al solito definendo \macro{\_GNU\_SOURCE}, le due
3063 funzioni sono \funcd{asprintf} e \funcd{vasprintf}, ed i rispettivi prototipi
3064 sono:
3065 \begin{functions}
3066   \headdecl{stdio.h} 
3067     
3068   \funcdecl{int asprintf(char **strptr, const char *format, ...)}  Stampa gli
3069   argomenti specificati secondo il formato specificato da \param{format} su
3070   una stringa allocata automaticamente all'indirizzo \param{*strptr}.
3071   
3072   \funcdecl{int vasprintf(char **strptr, const char *format, va\_list ap)}
3073   Stampa gli argomenti della lista \param{ap} secondo il formato specificato
3074   da \param{format} su una stringa allocata automaticamente all'indirizzo
3075   \param{*strptr}.
3076
3077   \bodydesc{Le funzioni ritornano il numero di caratteri stampati.}
3078 \end{functions}
3079
3080 Entrambe le funzioni prendono come argomento \param{strptr} che deve essere
3081 l'indirizzo di un puntatore ad una stringa di caratteri, in cui verrà
3082 restituito (si ricordi quanto detto in sez.~\ref{sec:proc_var_passing} a
3083 proposito dei \itindex{value~result~argument} \textit{value result argument})
3084 l'indirizzo della stringa allocata automaticamente dalle funzioni. Occorre
3085 inoltre ricordarsi di invocare \func{free} per liberare detto puntatore quando
3086 la stringa non serve più, onde evitare \itindex{memory~leak} \textit{memory
3087   leak}.
3088
3089 % TODO verificare se mettere prototipi di \func{dprintf} e \func{vdprintf}
3090
3091 Infine una ulteriore estensione GNU definisce le due funzioni \funcm{dprintf} e
3092 \funcm{vdprintf}, che prendono un file descriptor al posto dello
3093 \textit{stream}. Altre estensioni permettono di scrivere con caratteri
3094 estesi. Anche queste funzioni, il cui nome è generato dalle precedenti
3095 funzioni aggiungendo una \texttt{w} davanti a \texttt{print}, sono trattate in
3096 dettaglio nella documentazione delle \acr{glibc}.
3097
3098 In corrispondenza alla famiglia di funzioni \func{printf} che si usano per
3099 l'output formattato, l'input formattato viene eseguito con le funzioni della
3100 famiglia \func{scanf}; fra queste le tre più importanti sono \funcd{scanf},
3101 \funcd{fscanf} e \funcd{sscanf}, i cui prototipi sono:
3102 \begin{functions}
3103   \headdecl{stdio.h} \funcdecl{int scanf(const char *format, ...)} Esegue una
3104   scansione di \file{stdin} cercando una corrispondenza di quanto letto con il
3105   formato dei dati specificato da \param{format}, ed effettua le relative
3106   conversione memorizzando il risultato negli argomenti seguenti.
3107   
3108   \funcdecl{int fscanf(FILE *stream, const char *format, ...)}  Analoga alla
3109   precedente, ma effettua la scansione su \param{stream}.
3110   
3111   \funcdecl{int sscanf(char *str, const char *format, ...)} Analoga alle
3112   precedenti, ma effettua la scansione dalla stringa \param{str}.
3113   
3114   \bodydesc{Le funzioni ritornano il numero di elementi assegnati. Questi
3115     possono essere in numero inferiore a quelli specificati, ed anche zero.
3116     Quest'ultimo valore significa che non si è trovata corrispondenza. In caso
3117     di errore o fine del file viene invece restituito \val{EOF}.}
3118 \end{functions}
3119 \noindent e come per le analoghe funzioni di scrittura esistono le relative
3120 \funcm{vscanf}, \funcm{vfscanf} e \funcm{vsscanf} che usano un puntatore ad
3121 una lista di argomenti.
3122
3123 Tutte le funzioni della famiglia delle \func{scanf} vogliono come argomenti i
3124 puntatori alle variabili che dovranno contenere le conversioni; questo è un
3125 primo elemento di disagio in quanto è molto facile dimenticarsi di questa
3126 caratteristica.
3127
3128 Le funzioni leggono i caratteri dallo \textit{stream} (o dalla stringa) di
3129 input ed eseguono un confronto con quanto indicato in \param{format}, la
3130 sintassi di questo argomento è simile a quella usata per l'analogo di
3131 \func{printf}, ma ci sono varie differenze.  Le funzioni di input infatti sono
3132 più orientate verso la lettura di testo libero che verso un input formattato
3133 in campi fissi. Uno spazio in \param{format} corrisponde con un numero
3134 qualunque di caratteri di separazione (che possono essere spazi, tabulatori,
3135 virgole ecc.), mentre caratteri diversi richiedono una corrispondenza
3136 esatta. Le direttive di conversione sono analoghe a quelle di \func{printf} e
3137 si trovano descritte in dettaglio nelle pagine di manuale e nel manuale delle
3138 \acr{glibc}.
3139
3140 Le funzioni eseguono la lettura dall'input, scartano i separatori (e gli
3141 eventuali caratteri diversi indicati dalla stringa di formato) effettuando le
3142 conversioni richieste; in caso la corrispondenza fallisca (o la funzione non
3143 sia in grado di effettuare una delle conversioni richieste) la scansione viene
3144 interrotta immediatamente e la funzione ritorna lasciando posizionato lo
3145 \textit{stream} al primo carattere che non corrisponde.
3146
3147 Data la notevole complessità di uso di queste funzioni, che richiedono molta
3148 cura nella definizione delle corrette stringhe di formato e sono facilmente
3149 soggette ad errori, e considerato anche il fatto che è estremamente macchinoso
3150 recuperare in caso di fallimento nelle corrispondenze, l'input formattato non
3151 è molto usato. In genere infatti quando si ha a che fare con un input
3152 relativamente semplice si preferisce usare l'input di linea ed effettuare
3153 scansione e conversione di quanto serve direttamente con una delle funzioni di
3154 conversione delle stringhe; se invece il formato è più complesso diventa più
3155 facile utilizzare uno strumento come \cmd{flex}\footnote{il programma
3156   \cmd{flex}, è una implementazione libera di \cmd{lex} un generatore di
3157   analizzatori lessicali. Per i dettagli si può fare riferimento al manuale
3158   \cite{flex}.} per generare un analizzatore lessicale o il
3159 \cmd{bison}\footnote{il programma \cmd{bison} è un clone del generatore di
3160   parser \cmd{yacc}, maggiori dettagli possono essere trovati nel relativo
3161   manuale \cite{bison}.} per generare un parser.
3162
3163
3164 \subsection{Posizionamento su uno \textit{stream}}
3165 \label{sec:file_fseek}
3166
3167 Come per i file descriptor anche per gli \textit{stream} è possibile spostarsi
3168 all'interno di un file per effettuare operazioni di lettura o scrittura in un
3169 punto prestabilito; sempre che l'operazione di riposizionamento sia supportata
3170 dal file sottostante lo \textit{stream}, quando cioè si ha a che fare con
3171 quello che viene detto un file ad \textsl{accesso casuale}.\footnote{dato che
3172   in un sistema Unix esistono vari tipi di file, come le fifo ed i
3173   \index{file!di~dispositivo} file di dispositivo, non è scontato che questo
3174   sia sempre vero.}
3175
3176 In GNU/Linux ed in generale in ogni sistema unix-like la posizione nel file è
3177 espressa da un intero positivo, rappresentato dal tipo \type{off\_t}, il
3178 problema è che alcune delle funzioni usate per il riposizionamento sugli
3179 \textit{stream} originano dalle prime versioni di Unix, in cui questo tipo non
3180 era ancora stato definito, e che in altri sistemi non è detto che la posizione
3181 su un file venga sempre rappresentata con il numero di caratteri dall'inizio
3182 (ad esempio in VMS può essere rappresentata come numero di record, più
3183 l'offset rispetto al record corrente).
3184
3185 Tutto questo comporta la presenza di diverse funzioni che eseguono
3186 sostanzialmente le stesse operazioni, ma usano argomenti di tipo diverso. Le
3187 funzioni tradizionali usate per il riposizionamento della posizione in uno
3188 \textit{stream} sono \funcd{fseek} e \funcd{rewind} i cui prototipi sono:
3189 \begin{functions}
3190   \headdecl{stdio.h} 
3191   
3192   \funcdecl{int fseek(FILE *stream, long offset, int whence)} Sposta la
3193   posizione nello \textit{stream} secondo quanto specificato
3194   tramite \param{offset} e \param{whence}.
3195
3196   \funcdecl{void rewind(FILE *stream)} Riporta la posizione nello
3197   \textit{stream} all'inizio del file.
3198 \end{functions}
3199
3200 L'uso di \func{fseek} è del tutto analogo a quello di \func{lseek} per i file
3201 descriptor, e gli argomenti, a parte il tipo, hanno lo stesso significato; in
3202 particolare \param{whence} assume gli stessi valori già visti in
3203 sez.~\ref{sec:file_lseek}.  La funzione restituisce 0 in caso di successo e -1
3204 in caso di errore.  La funzione \func{rewind} riporta semplicemente la
3205 posizione corrente all'inizio dello \textit{stream}, ma non esattamente
3206 equivalente ad una \code{fseek(stream, 0L, SEEK\_SET)} in quanto vengono
3207 cancellati anche i flag di errore e fine del file.
3208
3209 Per ottenere la posizione corrente si usa invece la funzione \funcd{ftell}, il
3210 cui prototipo è:
3211 \begin{prototype}{stdio.h}{long ftell(FILE *stream)} 
3212   Legge la posizione attuale nello \textit{stream} \param{stream}.
3213   
3214   \bodydesc{La funzione restituisce la posizione corrente, o -1 in caso
3215     di fallimento, che può esser dovuto sia al fatto che il file non
3216     supporta il riposizionamento che al fatto che la posizione non può
3217     essere espressa con un \ctyp{long int}}
3218 \end{prototype}
3219 \noindent la funzione restituisce la posizione come numero di byte
3220 dall'inizio dello \textit{stream}. 
3221
3222 Queste funzioni esprimono tutte la posizione nel file come un \ctyp{long int}.
3223 Dato che (ad esempio quando si usa un filesystem indicizzato a 64 bit) questo
3224 può non essere possibile lo standard POSIX ha introdotto le nuove funzioni
3225 \funcd{fgetpos} e \funcd{fsetpos}, che invece usano il nuovo tipo
3226 \type{fpos\_t}, ed i cui prototipi sono:
3227 \begin{functions}
3228   \headdecl{stdio.h} 
3229   
3230   \funcdecl{int fsetpos(FILE *stream, fpos\_t *pos)} Imposta la posizione
3231   corrente nello \textit{stream} \param{stream} al valore specificato
3232   da \param{pos}.
3233   
3234   \funcdecl{int fgetpos(FILE *stream, fpos\_t *pos)} Legge la posizione
3235   corrente nello \textit{stream} \param{stream} e la scrive in \param{pos}.
3236   
3237   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
3238     errore.}
3239 \end{functions}
3240
3241 In Linux, a partire dalle glibc 2.1, sono presenti anche le due funzioni
3242 \func{fseeko} e \func{ftello}, che sono assolutamente identiche alle
3243 precedenti \func{fseek} e \func{ftell} ma hanno argomenti di tipo
3244 \type{off\_t} anziché di tipo \ctyp{long int}. Dato che \ctyp{long} è nella
3245 gran parte dei casi un intero a 32 bit, questo diventa un problema quando la
3246 posizione sul file viene espressa con un valore a 64 bit come accade nei
3247 sistemi più moderni.
3248
3249 % TODO: mettere prototipi espliciti fseeko e ftello o menzione?
3250
3251
3252 \section{Funzioni avanzate}
3253 \label{sec:file_stream_adv_func}
3254
3255 In questa sezione esamineremo alcune funzioni avanzate che permettono di
3256 eseguire operazioni particolari sugli \textit{stream}, come leggerne gli
3257 attributi, controllarne le modalità di bufferizzazione, gestire direttamente i
3258 lock impliciti per la programmazione \itindex{thread} \textit{multi-thread}.
3259
3260
3261 \subsection{Le funzioni di controllo}
3262 \label{sec:file_stream_cntrl}
3263
3264 Al contrario di quanto avviene con i file descriptor, le librerie standard del
3265 C non prevedono nessuna funzione come la \func{fcntl} per il controllo degli
3266 attributi dei file. Però, dato che ogni \textit{stream} si appoggia ad un file
3267 descriptor, si può usare la funzione \funcd{fileno} per ottenere quest'ultimo,
3268 il prototipo della funzione è:
3269 \begin{prototype}{stdio.h}{int fileno(FILE *stream)}
3270   Legge il file descriptor sottostante lo \textit{stream} \param{stream}.
3271   
3272   \bodydesc{Restituisce il numero del file descriptor in caso di successo, e
3273     -1 qualora \param{stream} non sia valido, nel qual caso imposta
3274     \var{errno} a \errval{EBADF}.}
3275 \end{prototype}
3276 \noindent ed in questo modo diventa possibile usare direttamente \func{fcntl}.
3277
3278 Questo permette di accedere agli attributi del file descriptor sottostante lo
3279 \textit{stream}, ma non ci dà nessuna informazione riguardo alle proprietà
3280 dello \textit{stream} medesimo.  Le \acr{glibc} però supportano alcune
3281 estensioni derivate da Solaris, che permettono di ottenere informazioni utili.
3282
3283 Ad esempio in certi casi può essere necessario sapere se un certo
3284 \textit{stream} è accessibile in lettura o scrittura. In genere questa
3285 informazione non è disponibile, e si deve ricordare come il file è stato
3286 aperto. La cosa può essere complessa se le operazioni vengono effettuate in
3287 una subroutine, che a questo punto necessiterà di informazioni aggiuntive
3288 rispetto al semplice puntatore allo \textit{stream}; questo può essere evitato
3289 con le due funzioni \funcd{\_\_freadable} e \funcd{\_\_fwritable} i cui
3290 prototipi sono:
3291 \begin{functions}
3292   \headdecl{stdio\_ext.h}
3293   \funcdecl{int \_\_freadable(FILE *stream)}
3294   Restituisce un valore diverso da zero se \param{stream} consente la lettura.
3295
3296   \funcdecl{int \_\_fwritable(FILE *stream)}  
3297   Restituisce un valore diverso da zero se \param{stream} consente la
3298   scrittura.
3299 \end{functions}
3300 \noindent che permettono di ottenere questa informazione.
3301
3302 La conoscenza dell'ultima operazione effettuata su uno \textit{stream} aperto
3303 è utile in quanto permette di trarre conclusioni sullo stato del buffer e del
3304 suo contenuto. Altre due funzioni, \funcd{\_\_freading} e \funcd{\_\_fwriting}
3305 servono a tale scopo, il loro prototipo è:
3306 \begin{functions}
3307   \headdecl{stdio\_ext.h}
3308   \funcdecl{int \_\_freading(FILE *stream)}
3309   Restituisce un valore diverso da zero se \param{stream} è aperto in sola
3310   lettura o se l'ultima operazione è stata di lettura.
3311
3312   \funcdecl{int \_\_fwriting(FILE *stream)}  
3313   Restituisce un valore diverso da zero se \param{stream} è aperto in sola
3314   scrittura o se l'ultima operazione è stata di scrittura.
3315 \end{functions}
3316
3317 Le due funzioni permettono di determinare di che tipo è stata l'ultima
3318 operazione eseguita su uno \textit{stream} aperto in lettura/scrittura;
3319 ovviamente se uno \textit{stream} è aperto in sola lettura (o sola scrittura)
3320 la modalità dell'ultima operazione è sempre determinata; l'unica ambiguità è
3321 quando non sono state ancora eseguite operazioni, in questo caso le funzioni
3322 rispondono come se una operazione ci fosse comunque stata.
3323
3324
3325 \subsection{Il controllo della bufferizzazione}
3326 \label{sec:file_buffering_ctrl}
3327
3328 Come accennato in sez.~\ref{sec:file_buffering} le librerie definiscono una
3329 serie di funzioni che permettono di controllare il comportamento degli
3330 \textit{stream}; se non si è specificato nulla, la modalità di buffering viene
3331 decisa autonomamente sulla base del tipo di file sottostante, ed i buffer
3332 vengono allocati automaticamente.
3333
3334 Però una volta che si sia aperto lo \textit{stream} (ma prima di aver compiuto
3335 operazioni su di esso) è possibile intervenire sulle modalità di buffering; la
3336 funzione che permette di controllare la bufferizzazione è \funcd{setvbuf}, il
3337 suo prototipo è:
3338 \begin{prototype}{stdio.h}{int setvbuf(FILE *stream, char *buf, int mode, 
3339     size\_t size)}
3340   
3341   Imposta la bufferizzazione dello \textit{stream} \param{stream} nella
3342   modalità indicata da \param{mode}, usando \param{buf} come buffer di
3343   lunghezza
3344   \param{size}.
3345   
3346   \bodydesc{Restituisce zero in caso di successo, ed un valore qualunque in
3347     caso di errore, nel qual caso \var{errno} viene impostata opportunamente.}
3348 \end{prototype}
3349
3350 La funzione permette di controllare tutti gli aspetti della bufferizzazione;
3351 l'utente può specificare un buffer da usare al posto di quello allocato dal
3352 sistema passandone alla funzione l'indirizzo in \param{buf} e la dimensione in
3353 \param{size}. 
3354
3355 Ovviamente se si usa un buffer specificato dall'utente questo deve essere
3356 stato allocato e rimanere disponibile per tutto il tempo in cui si opera sullo
3357 \textit{stream}. In genere conviene allocarlo con \func{malloc} e disallocarlo
3358 dopo la chiusura del file; ma fintanto che il file è usato all'interno di una
3359 funzione, può anche essere usata una \index{variabili!automatiche} variabile
3360 automatica. In \headfile{stdio.h} è definita la macro \const{BUFSIZ}, che
3361 indica le dimensioni generiche del buffer di uno \textit{stream}; queste
3362 vengono usate dalla funzione \func{setbuf}.  Non è detto però che tale
3363 dimensione corrisponda sempre al valore ottimale (che può variare a seconda
3364 del dispositivo).
3365
3366 Dato che la procedura di allocazione manuale è macchinosa, comporta dei rischi
3367 (come delle scritture accidentali sul buffer) e non assicura la scelta delle
3368 dimensioni ottimali, è sempre meglio lasciare allocare il buffer alle funzioni
3369 di libreria, che sono in grado di farlo in maniera ottimale e trasparente
3370 all'utente (in quanto la deallocazione avviene automaticamente). Inoltre
3371 siccome alcune implementazioni usano parte del buffer per mantenere delle
3372 informazioni di controllo, non è detto che le dimensioni dello stesso
3373 coincidano con quelle su cui viene effettuato l'I/O.
3374
3375 \begin{table}[htb]
3376   \centering
3377   \footnotesize
3378     \begin{tabular}[c]{|l|l|}
3379       \hline
3380       \textbf{Valore} & \textbf{Modalità} \\
3381       \hline
3382       \hline
3383       \const{\_IONBF} & \textit{unbuffered}\\
3384       \const{\_IOLBF} & \textit{line buffered}\\
3385       \const{\_IOFBF} & \textit{fully buffered}\\
3386       \hline
3387     \end{tabular}
3388     \caption{Valori dell'argomento \param{mode} di \func{setvbuf} 
3389       per l'impostazione delle modalità di bufferizzazione.}
3390   \label{tab:file_stream_buf_mode}
3391 \end{table}
3392
3393 Per evitare che \func{setvbuf} imposti il buffer basta passare un valore
3394 \val{NULL} per \param{buf} e la funzione ignorerà l'argomento \param{size}
3395 usando il buffer allocato automaticamente dal sistema.  Si potrà comunque
3396 modificare la modalità di bufferizzazione, passando in \param{mode} uno degli
3397 opportuni valori elencati in tab.~\ref{tab:file_stream_buf_mode}. Qualora si
3398 specifichi la modalità non bufferizzata i valori di \param{buf} e \param{size}
3399 vengono sempre ignorati.
3400
3401 Oltre a \func{setvbuf} le \acr{glibc} definiscono altre tre funzioni per la
3402 gestione della bufferizzazione di uno \textit{stream}: \funcd{setbuf},
3403 \funcd{setbuffer} e \funcd{setlinebuf}; i loro prototipi sono:
3404 \begin{functions}
3405   \headdecl{stdio.h} 
3406   
3407   \funcdecl{void setbuf(FILE *stream, char *buf)} Disabilita la
3408   bufferizzazione se \param{buf} è \val{NULL}, altrimenti usa \param{buf}
3409   come buffer di dimensione \const{BUFSIZ} in modalità \textit{fully buffered}.
3410   
3411   \funcdecl{void setbuffer(FILE *stream, char *buf, size\_t size)} Disabilita
3412   la bufferizzazione se \param{buf} è \val{NULL}, altrimenti usa \param{buf}
3413   come buffer di dimensione \param{size} in modalità \textit{fully buffered}.
3414   
3415   \funcdecl{void setlinebuf(FILE *stream)} Pone lo \textit{stream} in modalità
3416   \textit{line buffered}.
3417 \end{functions}
3418 \noindent tutte queste funzioni sono realizzate con opportune chiamate a
3419 \func{setvbuf} e sono definite solo per compatibilità con le vecchie librerie
3420 BSD. Infine le \acr{glibc} provvedono le funzioni non standard\footnote{anche
3421   queste funzioni sono originarie di Solaris.} \funcd{\_\_flbf} e
3422 \funcd{\_\_fbufsize} che permettono di leggere le proprietà di bufferizzazione
3423 di uno \textit{stream}; i cui prototipi sono:
3424 \begin{functions}
3425   \headdecl{stdio\_ext.h} 
3426   
3427   \funcdecl{int \_\_flbf(FILE *stream)} Restituisce un valore diverso da zero
3428   se \param{stream} è in modalità \textit{line buffered}.
3429   
3430   \funcdecl{size\_t \_\_fbufsize(FILE *stream)} Restituisce le dimensioni del
3431   buffer di \param{stream}.
3432 \end{functions}
3433
3434 Come già accennato, indipendentemente dalla modalità di bufferizzazione
3435 scelta, si può forzare lo scarico dei dati sul file con la funzione
3436 \funcd{fflush}, il suo prototipo è:
3437 \begin{prototype}{stdio.h}{int fflush(FILE *stream)}
3438   
3439   Forza la scrittura di tutti i dati bufferizzati dello
3440   \textit{stream} \param{stream}.
3441   
3442   \bodydesc{Restituisce zero in caso di successo, ed \val{EOF} in caso di
3443     errore, impostando \var{errno} a \errval{EBADF} se \param{stream} non è
3444     aperto o non è aperto in scrittura, o ad uno degli errori di
3445     \func{write}.}
3446 \end{prototype}
3447 \noindent anche di questa funzione esiste una analoga
3448 \func{fflush\_unlocked}\footnote{accessibile definendo \macro{\_BSD\_SOURCE} o
3449   \macro{\_SVID\_SOURCE} o \macro{\_GNU\_SOURCE}.} che non effettua il blocco
3450 dello stream.
3451
3452 % TODO aggiungere prototipo \func{fflush\_unlocked}?
3453
3454 Se \param{stream} è \val{NULL} lo scarico dei dati è forzato per tutti gli
3455 \textit{stream} aperti. Esistono però circostanze, ad esempio quando si vuole
3456 essere sicuri che sia stato eseguito tutto l'output su terminale, in cui serve
3457 poter effettuare lo scarico dei dati solo per gli \textit{stream} in modalità
3458 line buffered; per questo motivo le \acr{glibc} supportano una estensione di
3459 Solaris, la funzione \funcd{\_flushlbf}, il cui prototipo è:
3460 \begin{prototype}{stdio-ext.h}{void \_flushlbf(void)}
3461   Forza la scrittura di tutti i dati bufferizzati degli \textit{stream} in
3462   modalità line buffered.
3463 \end{prototype}
3464
3465 Si ricordi comunque che lo scarico dei dati dai buffer effettuato da queste
3466 funzioni non comporta la scrittura di questi su disco; se si vuole che il
3467 kernel dia effettivamente avvio alle operazioni di scrittura su disco occorre
3468 usare \func{sync} o \func{fsync} (si veda~sez.~\ref{sec:file_sync}).
3469
3470 Infine esistono anche circostanze in cui si vuole scartare tutto l'output
3471 pendente; per questo si può usare \funcd{fpurge}, il cui prototipo è:
3472 \begin{prototype}{stdio.h}{int fpurge(FILE *stream)}
3473  
3474   Cancella i buffer di input e di output dello \textit{stream} \param{stream}.
3475   
3476   \bodydesc{Restituisce zero in caso di successo, ed \val{EOF} in caso di
3477     errore.}
3478 \end{prototype}
3479
3480 La funzione scarta tutti i dati non ancora scritti (se il file è aperto in
3481 scrittura), e tutto l'input non ancora letto (se è aperto in lettura),
3482 compresi gli eventuali caratteri rimandati indietro con \func{ungetc}.
3483
3484
3485 \subsection{Gli \textit{stream} e i \textit{thread}}
3486 \label{sec:file_stream_thread}
3487
3488 \itindbeg{thread}
3489
3490 Gli \textit{stream} possono essere usati in applicazioni \textit{multi-thread}
3491 allo stesso modo in cui sono usati nelle applicazioni normali, ma si deve
3492 essere consapevoli delle possibili complicazioni anche quando non si usano i
3493 \textit{thread}, dato che l'implementazione delle librerie è influenzata
3494 pesantemente dalle richieste necessarie per garantirne l'uso con i
3495 \textit{thread}.
3496
3497 Lo standard POSIX richiede che le operazioni sui file siano atomiche rispetto
3498 ai \textit{thread}, per questo le operazioni sui buffer effettuate dalle
3499 funzioni di libreria durante la lettura e la scrittura di uno \textit{stream}
3500 devono essere opportunamente protette (in quanto il sistema assicura
3501 l'atomicità solo per le system call). Questo viene fatto associando ad ogni
3502 \textit{stream} un opportuno blocco che deve essere implicitamente acquisito
3503 prima dell'esecuzione di qualunque operazione.
3504
3505 Ci sono comunque situazioni in cui questo non basta, come quando un
3506 \textit{thread} necessita di compiere più di una operazione sullo
3507 \textit{stream} atomicamente, per questo motivo le librerie provvedono anche
3508 delle funzioni \funcd{flockfile}, \funcd{ftrylockfile} e \funcd{funlockfile},
3509 che permettono la gestione esplicita dei blocchi sugli \textit{stream}; esse
3510 sono disponibili definendo \macro{\_POSIX\_THREAD\_SAFE\_FUNCTIONS} ed i loro
3511 prototipi sono:
3512 \begin{functions}
3513   \headdecl{stdio.h}
3514   
3515   \funcdecl{void flockfile(FILE *stream)} Esegue l'acquisizione del lock dello
3516   \textit{stream} \param{stream}, bloccandosi se il lock non è disponibile.
3517   
3518   \funcdecl{int ftrylockfile(FILE *stream)} Tenta l'acquisizione del lock
3519   dello \textit{stream} \param{stream}, senza bloccarsi se il lock non è
3520   disponibile.  Ritorna zero in caso di acquisizione del lock, diverso da zero
3521   altrimenti.
3522   
3523   \funcdecl{void funlockfile(FILE *stream)} Rilascia il lock dello
3524   \textit{stream} \param{stream}.
3525 \end{functions}
3526 \noindent con queste funzioni diventa possibile acquisire un blocco ed
3527 eseguire tutte le operazioni volute, per poi rilasciarlo. 
3528
3529 Ma, vista la complessità delle strutture di dati coinvolte, le operazioni di
3530 blocco non sono del tutto indolori, e quando il locking dello \textit{stream}
3531 non è necessario (come in tutti i programmi che non usano i \textit{thread}),
3532 tutta la procedura può comportare dei costi pesanti in termini di
3533 prestazioni. Per questo motivo abbiamo visto come alle usuali funzioni di I/O
3534 non formattato siano associate delle versioni \code{\_unlocked} (alcune
3535 previste dallo stesso standard POSIX, altre aggiunte come estensioni dalle
3536 \acr{glibc}) che possono essere usate quando il locking non serve\footnote{in
3537   certi casi dette funzioni possono essere usate, visto che sono molto più
3538   efficienti, anche in caso di necessità di locking, una volta che questo sia
3539   stato acquisito manualmente.}  con prestazioni molto più elevate, dato che
3540 spesso queste versioni (come accade per \func{getc} e \func{putc}) sono
3541 realizzate come macro.
3542
3543 La sostituzione di tutte le funzioni di I/O con le relative versioni
3544 \code{\_unlocked} in un programma che non usa i \textit{thread} è però un
3545 lavoro abbastanza noioso; per questo motivo le \acr{glibc} forniscono al
3546 programmatore pigro un'altra via\footnote{anche questa mutuata da estensioni
3547   introdotte in Solaris.} da poter utilizzare per disabilitare in blocco il
3548 locking degli \textit{stream}: l'uso della funzione \funcd{\_\_fsetlocking},
3549 il cui prototipo è:
3550 \begin{prototype}{stdio\_ext.h}{int \_\_fsetlocking (FILE *stream, int type)}
3551   Specifica o richiede a seconda del valore di \param{type} la modalità in cui
3552   le operazioni di I/O su \param{stream} vengono effettuate rispetto
3553   all'acquisizione implicita del blocco sullo \textit{stream}.
3554
3555   \bodydesc{Restituisce lo stato di locking interno dello \textit{stream} con
3556     uno dei valori \const{FSETLOCKING\_INTERNAL} o
3557     \const{FSETLOCKING\_BYCALLER}.}
3558 \end{prototype}
3559
3560 La funzione imposta o legge lo stato della modalità di operazione di uno
3561 \textit{stream} nei confronti del locking a seconda del valore specificato
3562 con \param{type}, che può essere uno dei seguenti:
3563 \begin{basedescript}{\desclabelwidth{4.0cm}}
3564 \item[\const{FSETLOCKING\_INTERNAL}] Lo \textit{stream} userà da ora in poi il
3565   blocco implicito predefinito.
3566 \item[\const{FSETLOCKING\_BYCALLER}] Al ritorno della funzione sarà l'utente a
3567   dover gestire da solo il locking dello \textit{stream}.
3568 \item[\const{FSETLOCKING\_QUERY}] Restituisce lo stato corrente della modalità
3569   di blocco dello \textit{stream}.
3570 \end{basedescript}
3571
3572 % TODO trattare \func{clearerr\_unlocked} 
3573
3574
3575 \itindend{thread}
3576
3577
3578
3579 %%% Local Variables: 
3580 %%% mode: latex
3581 %%% TeX-master: "gapil"
3582 %%% End: 
3583
3584 % LocalWords:  stream cap system call kernel Ritchie glibc descriptor Stevens
3585 % LocalWords:  buf read write filesystem st blksize stat sez l'header stdio BSD
3586 % LocalWords:  nell'header stdin shell stdout stderr error freopen flush line
3587 % LocalWords:  unbuffered buffered newline fully SVr fopen fdopen POSIX const
3588 % LocalWords:  char path int fildes NULL errno malloc fcntl fclose fflush tab
3589 % LocalWords:  dup fifo socket append EXCL ccs STRING IRUSR IWUSR IRGRP IWGRP
3590 % LocalWords:  IROTH IWOTH umask fseek fsetpos rewind SEEK CUR EOF EBADF close
3591 % LocalWords:  sync fcloseall SOURCE void stdlib of feof ferror clearerr l'I ws
3592 % LocalWords:  unlocked fread fwrite size ptr nmemb nelem gcc padding point str
3593 % LocalWords:  lock thread fgetc getc getchar dell'overhead altresì unsigned ap
3594 % LocalWords:  getwc fgetwc getwchar wint wchar WEOF putc fputc putchar dell'I
3595 % LocalWords:  SVID getw putw parsing peeking ahead ungetc gets fgets string Di
3596 % LocalWords:  overflow Aleph stack fputs puts fgetws fputws getline ssize leak
3597 % LocalWords:  realloc value result argument memory getdelim delim printf short
3598 % LocalWords:  fprintf sprintf format snprintf variadic long double intmax list
3599 % LocalWords:  uintmax ptrdiff vprintf vfprintf vsprintf vsnprintf asprintf lex
3600 % LocalWords:  vasprintf strptr dprintf vdprintf print scanf fscanf sscanf flex
3601 % LocalWords:  vscanf vfscanf vsscanf bison parser yacc like off VMS whence pos
3602 % LocalWords:  lseek ftell fgetpos fpos fseeko ftello fileno Solaris freadable
3603 % LocalWords:  fwritable ext freading fwriting buffering setvbuf BUFSIZ setbuf
3604 % LocalWords:  IONBF IOLBF IOFBF setbuffer setlinebuf flbf fbufsize flushlbf hh
3605 % LocalWords:  fsync fpurge flockfile ftrylockfile funlockfile SAFE FUNCTIONS
3606 % LocalWords:  locking fsetlocking type BYCALLER QUERY ll
3607
3608
3609
3610 % LocalWords:  descriptor system call cap like kernel sez l'inode inode VFS tab
3611 % LocalWords:  process table struct files flags pos all'inode dentry fig shell
3612 % LocalWords:  error POSIX STDIN FILENO STDOUT STDERR unistd read write lseek
3613 % LocalWords:  close pathname sys fcntl int const char errno EEXIST CREAT EXCL
3614 % LocalWords:  EISDIR ENOTDIR ENXIO NOBLOCK WRONLY fifo ENODEV ETXTBSY ELOOP of
3615 % LocalWords:  NOFOLLOW EACCES ENAMETOOLONG ENOENT EROFS EFAULT ENOSPC ENOMEM
3616 % LocalWords:  EMFILE ENFILE NFS lock race condition Denial Service DoS RDONLY
3617 % LocalWords:  glibc RDWR NONBLOCK NOCTTY SHLOCK shared BSD EXLOCK TRUNC device
3618 % LocalWords:  opendir LARGEFILE APPEND append NDELAY ASYNC l'I SIGIO SYNC SVr
3619 % LocalWords:  DSYNC RSYNC filesystem DIRECT caching SGI IRIX dell'I FreeBSD fd
3620 % LocalWords:  fork exec umask SOURCE creat filedes EBADF EINTR EIO locking off
3621 % LocalWords:  behind sync flush shutdown whence ESPIPE socket EINVAL INCR XTND
3622 % LocalWords:  SEEK CUR EPIPE ssize void buf size count EAGAIN EWOULDBLOCK log
3623 % LocalWords:  Specification pwrite pread EFBIG SIGPIPE nell'inode dall'inode
3624 % LocalWords:  CLOEXEC stat fsync cache update l'update bdflush Documentation
3625 % LocalWords:  fdatasync fstat ext dup oldfd newfd DUPFD cmd long arg flock pid
3626 % LocalWords:  SETFD GETFD GETFL SETFL GETLK SETLK SETLKW GETOWN group SIGURG
3627 % LocalWords:  SETOWN GETSIG SETSIG sigaction SIGINFO siginfo SETLEASE lease is
3628 % LocalWords:  truncate GETLEASE NOTIFY AND ACCMODE ioctl everything argp all'I
3629 % LocalWords:  framebuffer request ENOTTY CDROM nell'header magic number openat
3630 % LocalWords:  FIOCLEX FIONCLEX FIOASYNC FIONBIO NOATIME redirezione FIOSETOWN
3631 % LocalWords:  FIOGETOWN FIONREAD mkdirat thread Solaris mkdir at Urlich proc
3632 % LocalWords:  Drepper path dirfd faccessat unlinkat access fchmodat chmod Di
3633 % LocalWords:  fchownat chown fstatat futimesat utimes linkat mknodat mknod uid
3634 % LocalWords:  readlinkat readlink renameat rename symlinkat symlink unlink gid
3635 % LocalWords:  mkfifoat mkfifo FDCWD dereferenziazione rmdir REMOVEDIR
3636 % LocalWords:  epoll lsattr chattr FIOQSIZE ATFILE lutimes utimensat lchown
3637 % LocalWords:  lstat owner FOLLOW
3638
3639 %%% Local Variables: 
3640 %%% mode: latex
3641 %%% TeX-master: "gapil"
3642 %%% End: