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