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