-\item[\const{O\_APPEND}] Il file viene aperto in \itindex{append~mode}
- \textit{append mode}. Prima di ciascuna scrittura la posizione corrente
- viene sempre impostata alla fine del file. Con NFS si può avere una
- corruzione del file se più di un processo scrive allo stesso
- tempo.\footnote{il problema è che NFS non supporta la scrittura in
- \itindex{append~mode} \textit{append}, ed il kernel deve simularla, ma
- questo comporta la possibilità di una \itindex{race~condition}
- \textit{race condition}, vedi sez.~\ref{sec:file_atomic}.}
-
-\item[\const{O\_NONBLOCK}] Il file viene aperto in modalità non bloccante per
- le operazioni di I/O (che tratteremo in sez.~\ref{sec:file_noblocking}):
- questo significa il fallimento di \func{read} in assenza di dati da leggere
- e quello di \func{write} in caso di impossibilità di scrivere
- immediatamente. Questa modalità ha senso solo per le fifo e per alcuni file
- di dispositivo.
-
-\item[\const{O\_NDELAY}] In Linux è sinonimo di
- \const{O\_NONBLOCK}.\footnote{l'opzione origina da SVr4, dove però causava
- il ritorno da una \func{read} con un valore nullo e non con un errore,
- questo introduce un'ambiguità, dato che come vedremo in
- sez.~\ref{sec:file_read} il ritorno di zero da parte di \func{read} ha il
- significato di una \textit{end-of-file}.}
-
-\item[\const{O\_ASYNC}] Apre il file per l'I/O in modalità asincrona (vedi
- sez.~\ref{sec:file_asyncronous_io}). Quando è impostato viene generato il
- segnale \signal{SIGIO} tutte le volte che sono disponibili dati in input sul
- file.
-
-\item[\const{O\_SYNC}] Apre il file per l'input/output sincrono: ogni
- \func{write} bloccherà fino al completamento della scrittura di tutti i dati
- sull'hardware sottostante.
-
-\item[\const{O\_FSYNC}] Sinonimo di \const{O\_SYNC}, usato da BSD.
-
-\item[\const{O\_DSYNC}] Variante di I/O sincrono definita da POSIX; presente
- dal kernel 2.1.130 come sinonimo di \const{O\_SYNC}.
-
-\item[\const{O\_RSYNC}] Variante analoga alla precedente, trattata allo stesso
- modo.
-
-\item[\const{O\_NOATIME}] Blocca l'aggiornamento dei tempi di accesso dei file
- (vedi sez.~\ref{sec:file_file_times}). Per molti filesystem questa
- funzionalità non è disponibile per il singolo file ma come opzione generale
- da specificare in fase di montaggio.
-
-\item[\const{O\_DIRECT}] Esegue l'I/O direttamente dai buffer in user space in
- maniera sincrona, in modo da scavalcare i meccanismi di caching del
- kernel. In genere questo peggiora le prestazioni tranne quando le
- applicazioni ottimizzano il proprio caching.\footnote{l'opzione è stata
- introdotta dalla SGI in IRIX, e serve sostanzialmente a permettere ad
- alcuni programmi (in genere database) la gestione diretta della
- bufferizzazione dell'I/O in quanto essi sono in grado di ottimizzarla al
- meglio per le loro prestazioni; l'opzione è presente anche in FreeBSD,
- senza limiti di allineamento dei buffer. In Linux è stata introdotta con
- il kernel 2.4.10, le versioni precedenti la ignorano.} Per i kernel della
- serie 2.4 si deve garantire che i buffer in user space siano allineati alle
- dimensioni dei blocchi del filesystem; per il kernel 2.6 basta che siano
- allineati a multipli di 512 byte.
-
-\item[\const{O\_CLOEXEC}] Attiva la modalità di \itindex{close-on-exec}
- \textit{close-on-exec} (vedi sez.~\ref{sec:file_sharing} e
- \ref{sec:file_fcntl}).\footnote{introdotto con il kernel 2.6.23, per evitare
- una \itindex{race~condition} \textit{race condition} che si può verificare
- con i \itindex{thread} \textit{thread}, fra l'apertura del file e
- l'impostazione della suddetta modalità con \func{fcntl}.}
-\end{basedescript}
-\end{itemize*}
+ \item[\const{O\_APPEND}] Il file viene aperto in \itindex{append~mode}
+ \textit{append mode}. Prima di ciascuna scrittura la posizione corrente
+ viene sempre impostata alla fine del file. Con NFS si può avere una
+ corruzione del file se più di un processo scrive allo stesso
+ tempo.\footnote{il problema è che NFS non supporta la scrittura in
+ \itindex{append~mode} \textit{append}, ed il kernel deve simularla, ma
+ questo comporta la possibilità di una \itindex{race~condition}
+ \textit{race condition}, vedi sez.~\ref{sec:file_atomic}.}
+
+ \item[\const{O\_NONBLOCK}] Il file viene aperto in modalità non bloccante
+ per le operazioni di I/O (che tratteremo in
+ sez.~\ref{sec:file_noblocking}): questo significa il fallimento di
+ \func{read} in assenza di dati da leggere e quello di \func{write} in caso
+ di impossibilità di scrivere immediatamente. Questa modalità ha senso solo
+ per le fifo e per alcuni file di dispositivo.
+
+ \item[\const{O\_NONBLOCK}] Apre il file in modalità non bloccante, e
+ comporta che \func{open} ritorni immediatamente anche quando dovrebbe
+ bloccarsi (l'opzione ha senso solo per le fifo, vedi
+ sez.~\ref{sec:ipc_named_pipe}).
+
+ \item[\const{O\_NDELAY}] In Linux è sinonimo di
+ \const{O\_NONBLOCK}.\footnote{l'opzione origina da SVr4, dove però causava
+ il ritorno da una \func{read} con un valore nullo e non con un errore,
+ questo introduce un'ambiguità, dato che come vedremo in
+ sez.~\ref{sec:file_read} il ritorno di zero da parte di \func{read} ha
+ il significato di una \textit{end-of-file}.}
+
+ \item[\const{O\_ASYNC}] Apre il file per l'I/O in modalità asincrona (vedi
+ sez.~\ref{sec:file_asyncronous_io}). Quando è impostato viene generato il
+ segnale \signal{SIGIO} tutte le volte che sono disponibili dati in input
+ sul file.
+
+ \item[\const{O\_SYNC}] Apre il file per l'input/output sincrono: ogni
+ \func{write} bloccherà fino al completamento della scrittura di tutti i
+ dati sull'hardware sottostante.
+
+ \item[\const{O\_FSYNC}] Sinonimo di \const{O\_SYNC}, usato da BSD.
+
+ \item[\const{O\_DSYNC}] Variante di I/O sincrono definita da POSIX; presente
+ dal kernel 2.1.130 come sinonimo di \const{O\_SYNC}.
+
+ \item[\const{O\_RSYNC}] Variante analoga alla precedente, trattata allo
+ stesso modo.
+
+ \item[\const{O\_NOATIME}] Blocca l'aggiornamento dei tempi di accesso dei
+ file (vedi sez.~\ref{sec:file_file_times}). Per molti filesystem questa
+ funzionalità non è disponibile per il singolo file ma come opzione
+ generale da specificare in fase di montaggio.
+
+ \item[\const{O\_DIRECT}] Esegue l'I/O direttamente dai buffer in user space
+ in maniera sincrona, in modo da scavalcare i meccanismi di caching del
+ kernel. In genere questo peggiora le prestazioni tranne quando le
+ applicazioni ottimizzano il proprio caching.\footnote{l'opzione è stata
+ introdotta dalla SGI in IRIX, e serve sostanzialmente a permettere ad
+ alcuni programmi (in genere database) la gestione diretta della
+ bufferizzazione dell'I/O in quanto essi sono in grado di ottimizzarla al
+ meglio per le loro prestazioni; l'opzione è presente anche in FreeBSD,
+ senza limiti di allineamento dei buffer. In Linux è stata introdotta con
+ il kernel 2.4.10, le versioni precedenti la ignorano.} Per i kernel
+ della serie 2.4 si deve garantire che i buffer in user space siano
+ allineati alle dimensioni dei blocchi del filesystem; per il kernel 2.6
+ basta che siano allineati a multipli di 512 byte.
+
+ \item[\const{O\_CLOEXEC}] Attiva la modalità di \itindex{close-on-exec}
+ \textit{close-on-exec} (vedi sez.~\ref{sec:file_sharing} e
+ \ref{sec:file_fcntl}).\footnote{introdotto con il kernel 2.6.23, per
+ evitare una \itindex{race~condition} \textit{race condition} che si può
+ verificare con i \itindex{thread} \textit{thread}, fra l'apertura del
+ file e l'impostazione della suddetta modalità con \func{fcntl}.}
+ \end{basedescript}