apre subito dopo un nuovo file questo diventerà il nuovo standard input (avrà
cioè il file descriptor 0).
-
\begin{table}[!htb]
\centering
\footnotesize
titolarità del file viste in \secref{sec:file_ownership}. Il parametro
\var{mode} deve essere specificato. \\
\macro{O\_EXCL} & usato in congiunzione con \macro{O\_CREAT} fa sì che
- l'esistenza del file diventi un errore\footnote{la man page di \func{open}
- segnala che questa opzione è difettosa su NFS, e che i programmi che la
- usano per stabilire un file di lock possono incorrere in una race
- condition. Si consiglia come alternativa di usare un file con un nome
- univoco e la funzione \func{link} per verificarne l'esistenza.} che fa
- fallire \func{open} con \macro{EEXIST}. \\
+ l'esistenza del file diventi un errore\protect\footnote{la man page di
+ \func{open} segnala che questa opzione è difettosa su NFS, e che i
+ programmi che la usano per stabilire un file di lock possono incorrere
+ in una race condition. Si consiglia come alternativa di usare un file
+ con un nome univoco e la funzione \func{link} per verificarne
+ l'esistenza.} che fa fallire \func{open} con \macro{EEXIST}. \\
\macro{O\_NONBLOCK} & apre il file in modalità non bloccante. Questo
valore specifica anche una modalità di operazione (vedi sotto), e
comporta che \func{open} ritorni immediatamente (torneremo su
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}. \\
+ kernel 2.1.126 per evitare dei DoS\protect\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. \\
automaticamente con l'aggiornamento del campo \var{i\_size} nell'inode.
\item se un file è in modalità \macro{O\_APPEND} tutte le volte che viene
effettuata una scrittura la posizione corrente viene prima settata alla
- dimensione corrente del file letta dall'inode. In questo modo il file viene
- automaticamente esteso.
+ dimensione corrente del file letta dall'inode. Dopo la scrittura il file
+ viene automaticamente esteso.
\item l'effetto di \func{lseek} è solo quello di cambiare il campo \var{f\_pos}
nella struttura \var{file} della \textit{file table}, non c'è nessuna
operazione sul file su disco. Quando la si usa per porsi alla fine del file
-
\subsection{Operazioni atomiche coi file}
\label{sec:file_atomic}
-cvs add
+Come si è visto in un sistema unix è sempre possibile per più processi
+accedere in contemporanea allo stesso file, e che le operazioni di lettura e
+scrittura saranno fatte in base alla posizione corrente nel file. Ovviamente
+senza prevedere opportuni meccanismi di sincronizzazione le operazioni
+potranno mescolarsi in maniera imprevedibile. L'unica garanzia è che se si è
+in modalità \macro{O\_APPEND} il sistema assicura che si scriva (con il
+procedimento appena esposto) sempre alla fine del file.
+
\begin{figure}[htb]
- \centering
- \includegraphics[width=14cm]{img/filedup.eps}
+ \centering \includegraphics[width=14cm]{img/filedup.eps}
\caption{Schema dell'accesso ai file duplicati}
\label{fig:file_dup}
\end{figure}