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