Aggiornate le date nelle note di copyright
[gapil.git] / fileunix.tex
index b3190f18db45a9e59ac1f5f038e0104c964b0358..b299eef34b5bf44a44f010c2d4c4e27fc1ab074c 100644 (file)
@@ -1,6 +1,6 @@
 %% fileunix.tex
 %%
-%% Copyright (C) 2000-2004 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2005 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -187,7 +187,8 @@ system call del kernel.
 \label{sec:file_open}
 
 La funzione \funcd{open} è la funzione fondamentale per accedere ai file, ed è
-quella che crea l'associazione fra un pathname ed un file descriptor, il suo
+quella che crea l'associazione fra un
+\index{\textit{pathname}}\textit{pathname} ed un file descriptor, il suo
 prototipo è:
 \begin{functions}
   \headdecl{sys/types.h}
@@ -217,9 +218,9 @@ prototipo 
     dispositivo che non esiste.
   \item[\errcode{ETXTBSY}] si è cercato di accedere in scrittura all'immagine
     di un programma in esecuzione.
-  \item[\errcode{ELOOP}] si sono incontrati troppi link simbolici nel risolvere
-    pathname o si è indicato \const{O\_NOFOLLOW} e \param{pathname} è un link
-    simbolico.
+  \item[\errcode{ELOOP}] si sono incontrati troppi link simbolici nel
+    risolvere il \textit{pathname} o si è indicato \const{O\_NOFOLLOW} e
+    \param{pathname} è un link simbolico.
   \end{errlist}
   ed inoltre \errval{EACCES}, \errval{ENAMETOOLONG}, \errval{ENOENT},
   \errval{EROFS}, \errval{EFAULT}, \errval{ENOSPC}, \errval{ENOMEM},
@@ -244,66 +245,79 @@ usato sempre il file descriptor con il valore pi
     \hline % modalità di apertura del file
     \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}. L'argomento
-    \param{mode} deve essere specificato. \\
-    \const{O\_EXCL} & usato in congiunzione con \const{O\_CREAT} fa sì che
-    l'esistenza del file diventi un errore\protect\footnotemark\ che fa fallire
-    \func{open} con \errcode{EEXIST}. \\
-    \const{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 (l'opzione ha senso 
-    solo per le fifo, torneremo questo in sez.~\ref{sec:ipc_named_pipe}). \\
-    \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}). \\
+                       titolarità del file viste in
+                       sez.~\ref{sec:file_ownership}. L'argomento 
+                       \param{mode} deve essere specificato. \\
+    \const{O\_EXCL}  & usato in congiunzione con \const{O\_CREAT} fa sì che
+                       l'esistenza del file diventi un
+                       errore\protect\footnotemark\ che fa fallire
+                       \func{open} con \errcode{EEXIST}. \\ 
+    \const{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 (l'opzione ha senso solo per le fifo,
+                       torneremo questo in sez.~\ref{sec:ipc_named_pipe}). \\ 
+    \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\_SHLOCK} & opzione di BSD, acquisisce uno shared lock (vedi
-    sez.~\ref{sec:file_locking}) sul file. Non è disponibile in Linux. \\
+                        sez.~\ref{sec:file_locking}) sul file. Non è
+                        disponibile in Linux. \\ 
     \const{O\_EXLOCK} & opzione di BSD, acquisisce uno lock esclusivo (vedi
-    sez.~\ref{sec:file_locking}) sul file. Non è disponibile in Linux. \\
-    \const{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. \\
-    \const{O\_NOFOLLOW} & se \param{pathname} è un link simbolico la chiamata
-    fallisce. Questa è un'estensione BSD aggiunta in Linux dal kernel 2.1.126.
-    Nelle versioni precedenti i link simbolici sono sempre seguiti, e questa
-    opzione è ignorata. \\
-    \const{O\_DIRECTORY} & se \param{pathname} non è una directory la chiamata
-    fallisce. Questo flag è specifico di Linux ed è stato introdotto con il
-    kernel 2.1.126 per evitare dei
-    \textit{DoS}\index{DoS}\protect\footnotemark\ 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}. \\
-    \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. \\
+                        sez.~\ref{sec:file_locking}) sul file. Non è
+                        disponibile in Linux. \\ 
+    \const{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. \\
+    \const{O\_NOFOLLOW}&se \param{pathname} è un link simbolico la chiamata
+                        fallisce. Questa è un'estensione BSD aggiunta in Linux
+                        dal kernel 2.1.126. Nelle versioni precedenti i link
+                        simbolici sono sempre seguiti, e questa opzione è
+                        ignorata. \\
+    \const{O\_DIRECTORY}& se \param{pathname} non è una directory la chiamata
+                        fallisce. Questo flag è specifico di Linux ed è stato
+                        introdotto con il kernel 2.1.126 per evitare dei 
+                        \textit{DoS}\index{DoS}\protect\footnotemark\ 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}. \\
+    \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. \\
     \hline
     \hline  % modalità di operazione col file
     \const{O\_APPEND} & il file viene aperto in append mode. Prima di ciascuna
-    scrittura la posizione corrente viene sempre impostata alla fine del
-    file. Può causare corruzione del file con NFS se più di un processo scrive
-    allo stesso tempo.\footnotemark\\
-    \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. \\
+                        scrittura la posizione corrente viene sempre impostata
+                        alla fine del file. Può causare corruzione del file
+                        con NFS se più di un processo scrive allo stesso
+                        tempo.\footnotemark\\ 
+    \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. \\ 
     \const{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di 
-    \const{O\_NONBLOCK}.\\
-    \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 \const{SIGIO} tutte le volte che sono disponibili
-    dati in input sul file. \\ 
-    \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.\\
-    \const{O\_FSYNC} & sinonimo di \const{O\_SYNC}. \\
-    \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 in fase
-    di montaggio.\\
+                        \const{O\_NONBLOCK}.\\
+    \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 \const{SIGIO}
+                        tutte le volte che sono disponibili dati in input
+                        sul file. \\  
+    \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.\\ 
+    \const{O\_FSYNC} &  sinonimo di \const{O\_SYNC}. \\
+    \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 in fase di montaggio.\\
     \hline
   \end{tabular}
   \caption{Valori e significato dei vari bit del \textit{file status flag}.}
@@ -313,8 +327,8 @@ usato sempre il file descriptor con il valore pi
 \footnotetext[2]{la pagina di manuale di \func{open} segnala che questa
   opzione è difettosa su NFS, e che i programmi che la usano per stabilire un
   \textsl{file di lock}\index{file!di lock} possono incorrere in una race
-  condition\index{race condition}.  Si consiglia come alternativa di usare un
-  file con un nome univoco e la funzione \func{link} per verificarne
+  condition\index{\textit{race~condition}}.  Si consiglia come alternativa di
+  usare un file con un nome univoco e la funzione \func{link} per verificarne
   l'esistenza (vedi sez.~\ref{sec:ipc_file_lock}).}
 
 \footnotetext[3]{\textit{Denial of Service}\index{DoS}, si chiamano così
@@ -501,7 +515,7 @@ la successiva scrittura avvenga alla fine del file, infatti se questo 
 aperto anche da un altro processo che vi ha scritto, la fine del file può
 essersi spostata, ma noi scriveremo alla posizione impostata in precedenza
 (questa è una potenziale sorgente di \textit{race condition}
-\index{race condition}, vedi sez.~\ref{sec:file_atomic}).
+\index{\textit{race~condition}}, vedi sez.~\ref{sec:file_atomic}).
 
 Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
 questo caso la funzione ritorna l'errore \errcode{EPIPE}. Questo, oltre che per
@@ -789,12 +803,12 @@ Un caso tipico di necessit
 vari processi devono scrivere alla fine di un file (ad esempio un file di
 log). Come accennato in sez.~\ref{sec:file_lseek} impostare la posizione alla
 fine del file e poi scrivere può condurre ad una \textit{race
-  condition}\index{race condition}: infatti può succedere che un secondo
-processo scriva alla fine del file fra la \func{lseek} e la \func{write}; in
-questo caso, come abbiamo appena visto, il file sarà esteso, ma il nostro
-primo processo avrà ancora la posizione corrente impostata con la \func{lseek}
-che non corrisponde più alla fine del file, e la successiva \func{write}
-sovrascriverà i dati del secondo processo.
+  condition}\index{\textit{race~condition}}: infatti può succedere che un
+secondo processo scriva alla fine del file fra la \func{lseek} e la
+\func{write}; in questo caso, come abbiamo appena visto, il file sarà esteso,
+ma il nostro primo processo avrà ancora la posizione corrente impostata con la
+\func{lseek} che non corrisponde più alla fine del file, e la successiva
+\func{write} sovrascriverà i dati del secondo processo.
 
 Il problema è che usare due system call in successione non è un'operazione
 atomica; il problema è stato risolto introducendo la modalità
@@ -808,9 +822,9 @@ Un altro caso tipico in cui 
 creare un \textsl{file di lock}\index{file!di lock}, bloccandosi se il file
 esiste. In questo caso la sequenza logica porterebbe a verificare prima
 l'esistenza del file con una \func{stat} per poi crearlo con una \func{creat};
-di nuovo avremmo la possibilità di una race condition\index{race condition} da
-parte di un altro processo che crea lo stesso file fra il controllo e la
-creazione.
+di nuovo avremmo la possibilità di una race
+condition\index{\textit{race~condition}} da parte di un altro processo che
+crea lo stesso file fra il controllo e la creazione.
 
 Per questo motivo sono stati introdotti per \func{open} i due flag
 \const{O\_CREAT} e \const{O\_EXCL}. In questo modo l'operazione di controllo
@@ -936,9 +950,9 @@ sull'altro (dato che quello che viene modificato 
 della \textit{file table} a cui entrambi fanno riferimento). L'unica
 differenza fra due file descriptor duplicati è che ciascuno avrà il suo
 \textit{file descriptor flag}; a questo proposito va specificato che nel caso
-di \func{dup} il flag di \textit{close-on-exec}\index{close-on-exec} (vedi
-sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl}) viene sempre cancellato
-nella copia.
+di \func{dup} il flag di \textit{close-on-exec}\index{\textit{close-on-exec}}
+(vedi sez.~\ref{sec:proc_exec} e sez.~\ref{sec:file_fcntl}) viene sempre
+cancellato nella copia.
 
 L'uso principale di questa funzione è per la redirezione dell'input e
 dell'output fra l'esecuzione di una \func{fork} e la successiva \func{exec};
@@ -1036,10 +1050,10 @@ per \var{cmd} 
   massimo numero di descrittori consentito.
 \item[\const{F\_SETFD}] imposta il valore del \textit{file descriptor flag} al
   valore specificato con \param{arg}. Al momento l'unico bit usato è quello di
-  \textit{close-on-exec}\index{close-on-exec}, identificato dalla costante
-  \const{FD\_CLOEXEC}, che serve a richiedere che il file venga chiuso nella
-  esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}). Ritorna un
-  valore nullo in caso di successo e -1 in caso di errore.
+  \textit{close-on-exec}\index{\textit{close-on-exec}}, identificato dalla
+  costante \const{FD\_CLOEXEC}, che serve a richiedere che il file venga
+  chiuso nella esecuzione di una \func{exec} (vedi sez.~\ref{sec:proc_exec}).
+  Ritorna un valore nullo in caso di successo e -1 in caso di errore.
 \item[\const{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
   \param{fd} o -1 in caso di errore; se \const{FD\_CLOEXEC} è impostato i file
   descriptor aperti vengono chiusi attraverso una \func{exec} altrimenti (il
@@ -1139,7 +1153,6 @@ sez.~\ref{sec:file_asyncronous_operation} mentre quelle relative al
 \textit{file locking}\index{file!locking} saranno esaminate in
 sez.~\ref{sec:file_locking}).
 
-
 Si tenga presente infine che quando si usa la funzione per determinare le
 modalità di accesso con cui è stato aperto il file (attraverso l'uso del
 comando \const{F\_GETFL}) è necessario estrarre i bit corrispondenti nel