+A differenza di tutti gli altri flag che vedremo in seguito, in questo caso
+non si ha a che fare con singoli bit separati, ma con un numero composto da
+due bit, e che può essere ottenuto dal valore dei \itindex{file~status~flag}
+\textit{file status flags} con un AND aritmetico con la maschera binaria
+\const{O\_ACCMODE}. Questo significa ad esempio che la combinazione
+\code{\const{O\_RDONLY}|\const{O\_WRONLY}} non è affatto equivalente a
+\const{O\_WRONLY}, e non deve essere usata.\footnote{in realtà su Linux, dove
+ i valori per le tre costanti di tab.~\ref{tab:open_access_mode_flag} sono
+ rispettivamente $0$, $1$ e $2$, il valore $3$ viene usato con un significato
+ speciale ed assolutamente fuori standard, disponibile solo per i file di
+ dispositivo e solo per alcuni driver, in cui si richiede la verifica della
+ capacità di accesso in lettura e scrittura ma viene restituito in file
+ descriptor che non può essere letto o scritto ma solo usato con una
+ \func{ioctl} (vedi sez.~\ref{sec:file_ioctl}).}
+
+Una modalità di accesso al file deve sempre essere specificata quando si apre
+un file, il valore indicato in \param{flags} viene salvato nei
+\itindex{file~status~flag} \textit{file status flags}, e può essere riletto
+con \func{fcntl}, ma non può essere modificato. Nella \acr{glibc} sono
+definite \const{O\_READ} come sinonimo di \const{O\_RDONLY}, \const{O\_WRITE}
+come sinonimo di \const{O\_WRONLY} ed una \const{O\_EXEC} che non esiste su
+Linux per l'apertura per l'esecuzione.\footnote{si tratta di definizioni
+ completamente fuori standard, che suppongono anche l'uso di bit distinti, ed
+ non è il caso di utilizzarle anche quando coincidenti con quelle di Linux.}
+
+Il secondo gruppo di flag è quello delle \textsl{modalità di
+ apertura},\footnote{la pagina di manuale di \func{open} parla di
+ \textit{file creation flags}, ma alcuni di questi non hanno nulla a che fare
+ con la creazione dei file, mentre il manuale dalla \acr{glibc} parla di più
+ correttamente di \textit{open-time flags}, dato che si tratta di flag il cui
+ significato ha senso solo al momento dell'apertura del file.} che permettono
+di specificare alcune delle caratteristiche del comportamento di \func{open}
+quando viene eseguita. Hanno effetto solo al momento della chiamata della
+funzione e non sono memorizzati \itindex{file~status~flag} \textit{file status
+ flags} né possono essere riletti.
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|p{8 cm}|}
+ \hline
+ \textbf{Flag} & \textbf{Significato} \\
+ \hline
+ \hline
+ \const{O\_CREAT} & Se il file non esiste verrà creato, con le regole
+ di titolarità del file viste in
+ sez.~\ref{sec:file_ownership_management}. Con
+ questa opzione l'argomento \param{mode} deve
+ essere specificato.\\
+ \const{O\_DIRECTORY}& Se \param{pathname} non è una directory la
+ chiamata fallisce (dal kernel 2.1.126). Questo
+ flag è specifico di Linux ed è stato introdotto
+ per evitare dei \itindex{Denial~of~Service~(DoS)}
+ \textit{DoS}\footnotemark\\ quando \func{opendir}
+ viene chiamata su una fifo o su un dispositivo
+ associato ad una unità a nastri. Non viene
+ utilizzato al di fuori dell'implementazione di
+ \func{opendir}.\\
+ \const{O\_EXCL} & Se usato in congiunzione con \const{O\_CREAT} fa
+ richiede che il file indicato da \param{pathname}
+ non esista (altrimenti causa un errore di
+ \errcode{EEXIST}).\\
+ \const{O\_LARGEFILE}& Nel caso di sistemi a 32 bit che supportano file
+ di grandi dimensioni consente di aprire file le
+ cui dimensioni non possono essere rappresentate da
+ numeri a 31 bit.\\
+ \const{O\_NOCTTY} & Se \param{pathname} si riferisce ad un dispositivo
+ di terminale, questo non diventerà il terminale di
+ controllo, anche se il processo non ne ha ancora
+ uno (si veda sez.~\ref{sec:sess_ctrl_term}).\\
+ \const{O\_NOFOLLOW} & Se \param{pathname} è un collegamento simbolico
+ la chiamata fallisce. Questa è un'estensione BSD
+ aggiunta in Linux dal kernel 2.1.126. Nelle
+ versioni precedenti i collegamenti simbolici sono
+ sempre seguiti, e questa opzione è ignorata.\\
+ \const{O\_TRUNC} & Se usato su un file di dati aperto in scrittura,
+ ne tronca la lunghezza a zero; con un terminale o
+ una fifo viene ignorato, negli altri casi il
+ comportamento di \func{open} non è specificato.\\
+ \hline
+ \end{tabular}
+ \caption{Le costanti che identificano le \textit{modalità di apertura} di
+ un file.}
+ \label{tab:open_time_flag}
+\end{table}
+
+\footnotetext{acronimo di \itindex{Denial~of~Service~(DoS)} \textit{Denial of
+ Service}, si chiamano così attacchi miranti ad impedire un servizio
+ causando una qualche forma di carico eccessivo per il sistema, che resta
+ bloccato nelle risposte all'attacco.}