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