- \macro{O\_SHLOCK} & \\
- \macro{O\_EXLOCK} & \\
- \macro{O\_TRUNC} & \\
- \macro{O\_NOFOLLOW} & \\
- \macro{O\_DIRECTORY} & \\
- \macro{O\_LARGEFILE} & \\
- \hline % modalità di operazione
- \macro{O\_APPEND} & \\
- \macro{O\_NONBLOCK} & Apre il file in modalità non bloccante, questo
- comporta che \func{open} ritorna immediatamente anche nei casi in cui si
- sarebbe bloccata. inoltre tutte le operazioni di I/O successive restano
- in modalità non bloccante, il che significa il fallimento di una
- \func{read} in assenza di dati da leggere e quello di una \func{write} in
- caso di impossibilità di scrivere immediatamente. \\
- \macro{O\_NDELAY} & sinonimo di \macro{O\_NONBLOCK}\\
- \macro{O\_ASYNC} & \\
+ \macro{O\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
+ \secref{sec:file_locking}) sul file. Non è disponibile in Linux.\\
+ \macro{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
+ \secref{sec:file_locking}) sul file. Non è disponibile in Linux.\\
+ \macro{O\_TRUNC} & se il file esiste ed è un file di dati e la modalità di
+ apertura consente la scrittura, allora la sua lunghezza verrà troncata a
+ zero. Se il file è un terminale o una fifo il flag verrà ignorato, negli
+ altri casi il comportamento non è specificato.\\
+ \macro{O\_NOFOLLOW} & se \var{pathname} è un link simbolico la chiamata
+ fallisce. Questa è una estensione BSD aggiunta in Linux dal kernel 2.1.126.
+ Nelle versioni precedenti i link simbolici sono sempre seguiti, e questa
+ opzione è ignorata.\\
+ \macro{O\_DIRECTORY} & se \var{pathname} non è una directory la chiamata
+ fallisce. Questo flag è specifico di Linux ed è stato introdotto con il
+ kernel 2.1.126 per evitare dei DoS\footnote{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} quando \func{opendir} viene chiamata su una fifo o su un
+ device di unità a nastri, non deve essere utilizzato al di fuori
+ dell'implementazione di \func{opendir}. \\
+ \macro{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.\\
+ \hline
+ \hline % modalità di operazione col file
+ \macro{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna
+ scrittura la posizione corrente viene sempre settata alla fine del
+ file. Può causare corruzione del file con NFS se più di un processo scrive
+ allo stesso tempo\footnote{il problema è che NFS non supporta la scrittura
+ in append, ed il kernel deve simularla, ma questo comporta la possibilità
+ di una race condition}.\\
+ \macro{O\_NONBLOCK} & il file viene aperto in modalità non bloccante per
+ le operazioni di I/O: questo significa il fallimento di una \func{read} in
+ assenza di dati da leggere e quello di una \func{write} in caso di
+ impossibilità di scrivere immediatamente. L'opzione è effettiva solo per
+ le fifo e per alcuni file di dispositivo. \\
+ \macro{O\_NDELAY} & in Linux\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 una ambiguità, dato che come vedremo in
+ \secref{sec:file_read} il ritorno di zero da parte di \func{read} ha il
+ significato di una end-of-file} è sinonimo di \macro{O\_NONBLOCK}\\
+ \macro{O\_ASYNC} & apre il file per l'input/output in modalità
+ asincrona. Non è supportato in Linux. \\