Materiale scritto a nizza
[gapil.git] / fileunix.tex
index 8f0245944435dae69a94587f857160f47b2636fb..c9712a72596999162df4bee2068b1a8a2c8da3d3 100644 (file)
@@ -1,6 +1,6 @@
 %% fileunix.tex
 %%
 %% fileunix.tex
 %%
-%% Copyright (C) 2000-2007 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2009 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",
 %% 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",
@@ -381,9 +381,10 @@ ritorno il file descriptor con il valore pi
   anche in FreeBSD, senza limiti di allineamento dei buffer. In Linux è stata
   introdotta con il kernel 2.4.10, le versioni precedenti la ignorano.}
 
   anche in FreeBSD, senza limiti di allineamento dei buffer. In Linux è stata
   introdotta con il kernel 2.4.10, le versioni precedenti la ignorano.}
 
-\footnotetext[7]{introdotto con il kernel 2.6.23, per evitare una \textit{race
-    condition} che si può verificare con i thread, fra l'apertura del file e
-  l'impostazione della suddetta modalità con \func{fcntl}.}
+\footnotetext[7]{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}.}
 
 Questa caratteristica permette di prevedere qual è il valore del file
 descriptor che si otterrà al ritorno di \func{open}, e viene talvolta usata da
 
 Questa caratteristica permette di prevedere qual è il valore del file
 descriptor che si otterrà al ritorno di \func{open}, e viene talvolta usata da
@@ -399,10 +400,11 @@ sez.~\ref{sec:file_sharing}) ed 
 all'inizio del file.
 
 L'argomento \param{mode} indica i permessi con cui il file viene creato; i
 all'inizio del file.
 
 L'argomento \param{mode} indica i permessi con cui il file viene creato; i
-valori possibili sono gli stessi già visti in sez.~\ref{sec:file_perm_overview}
-e possono essere specificati come OR binario delle costanti descritte in
-tab.~\ref{tab:file_bit_perm}. Questi permessi sono filtrati dal valore di
-\var{umask} (vedi sez.~\ref{sec:file_perm_management}) per il processo.
+valori possibili sono gli stessi già visti in
+sez.~\ref{sec:file_perm_overview} e possono essere specificati come OR binario
+delle costanti descritte in tab.~\ref{tab:file_bit_perm}. Questi permessi sono
+filtrati dal valore di \itindex{umask} \textit{umask} (vedi
+sez.~\ref{sec:file_perm_management}) per il processo.
 
 La funzione prevede diverse opzioni, che vengono specificate usando vari bit
 dell'argomento \param{flags}.  Alcuni di questi bit vanno anche a costituire
 
 La funzione prevede diverse opzioni, che vengono specificate usando vari bit
 dell'argomento \param{flags}.  Alcuni di questi bit vanno anche a costituire
@@ -561,9 +563,9 @@ essersi spostata, ma noi scriveremo alla posizione impostata in precedenza
   condition}, vedi sez.~\ref{sec:file_atomic}).
 
 Non tutti i file supportano la capacità di eseguire una \func{lseek}, in
   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
-i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che non
-supportano questa funzione, come ad esempio per i file di
+questo caso la funzione ritorna l'errore \errcode{ESPIPE}. Questo, oltre che
+per i tre casi citati nel prototipo, vale anche per tutti quei dispositivi che
+non supportano questa funzione, come ad esempio per i file di
 terminale.\footnote{altri sistemi, usando \const{SEEK\_SET}, in questo caso
   ritornano il numero di caratteri che vi sono stati scritti.} Lo standard
 POSIX però non specifica niente in proposito. Infine alcuni file speciali, ad
 terminale.\footnote{altri sistemi, usando \const{SEEK\_SET}, in questo caso
   ritornano il numero di caratteri che vi sono stati scritti.} Lo standard
 POSIX però non specifica niente in proposito. Infine alcuni file speciali, ad
@@ -638,7 +640,7 @@ rieseguire la funzione.  Torneremo in dettaglio sull'argomento in
 sez.~\ref{sec:sig_gen_beha}.  La seconda si verifica quando il file è aperto
 in modalità non bloccante (vedi sez.~\ref{sec:file_noblocking}) e non ci sono
 dati in ingresso: la funzione allora ritorna immediatamente con un errore
 sez.~\ref{sec:sig_gen_beha}.  La seconda si verifica quando il file è aperto
 in modalità non bloccante (vedi sez.~\ref{sec:file_noblocking}) e non ci sono
 dati in ingresso: la funzione allora ritorna immediatamente con un errore
-\errcode{EAGAIN}\footnote{BSD usa per questo errore la costante
+\errcode{EAGAIN}\footnote{in BSD si usa per questo errore la costante
   \errcode{EWOULDBLOCK}, in Linux, con le \acr{glibc}, questa è sinonima di
   \errcode{EAGAIN}.} che indica soltanto che non essendoci al momento dati
 disponibili occorre provare a ripetere la lettura in un secondo tempo.
   \errcode{EWOULDBLOCK}, in Linux, con le \acr{glibc}, questa è sinonima di
   \errcode{EAGAIN}.} che indica soltanto che non essendoci al momento dati
 disponibili occorre provare a ripetere la lettura in un secondo tempo.
@@ -650,7 +652,7 @@ dagli albori di Unix, ma nella seconda versione delle \textit{Single Unix
   l'emulazione per i vecchi kernel che non hanno la system call, è stato
   aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
   delle librerie la funzione non è disponibile.} (quello che viene chiamato
   l'emulazione per i vecchi kernel che non hanno la system call, è stato
   aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
   delle librerie la funzione non è disponibile.} (quello che viene chiamato
-normalmente Unix98, vedi sez.~\ref{sec:intro_opengroup}) è stata introdotta la
+normalmente Unix98, vedi sez.~\ref{sec:intro_xopen}) è stata introdotta la
 definizione di un'altra funzione di lettura, \funcd{pread}, il cui prototipo è:
 \begin{prototype}{unistd.h}
 {ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
 definizione di un'altra funzione di lettura, \funcd{pread}, il cui prototipo è:
 \begin{prototype}{unistd.h}
 {ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
@@ -938,7 +940,7 @@ usare le due funzioni \funcd{fsync} e \funcd{fdatasync}, i cui prototipi sono:
 \begin{functions}
   \headdecl{unistd.h}
   \funcdecl{int fsync(int fd)}
 \begin{functions}
   \headdecl{unistd.h}
   \funcdecl{int fsync(int fd)}
-  Sincronizza dati e metadati del file \param{fd}
+  Sincronizza dati e meta-dati del file \param{fd}
   \funcdecl{int fdatasync(int fd)}
   Sincronizza i dati del file \param{fd}.
   
   \funcdecl{int fdatasync(int fd)}
   Sincronizza i dati del file \param{fd}.
   
@@ -953,7 +955,7 @@ usare le due funzioni \funcd{fsync} e \funcd{fdatasync}, i cui prototipi sono:
 
 Entrambe le funzioni forzano la sincronizzazione col disco di tutti i dati del
 file specificato, ed attendono fino alla conclusione delle operazioni;
 
 Entrambe le funzioni forzano la sincronizzazione col disco di tutti i dati del
 file specificato, ed attendono fino alla conclusione delle operazioni;
-\func{fsync} forza anche la sincronizzazione dei metadati del file (che
+\func{fsync} forza anche la sincronizzazione dei meta-dati del file (che
 riguardano sia le modifiche alle tabelle di allocazione dei settori, che gli
 altri dati contenuti \index{inode} nell'inode che si leggono con \func{fstat},
 come i tempi del file).
 riguardano sia le modifiche alle tabelle di allocazione dei settori, che gli
 altri dati contenuti \index{inode} nell'inode che si leggono con \func{fstat},
 come i tempi del file).
@@ -1071,9 +1073,10 @@ parallelo alla chiamata a \func{open}, e questo lascia aperta la possibilit
 di una \itindex{race~condition} \textit{race condition}.
 
 Inoltre come già accennato, la directory di lavoro corrente è una proprietà
 di una \itindex{race~condition} \textit{race condition}.
 
 Inoltre come già accennato, la directory di lavoro corrente è una proprietà
-del singolo processo; questo significa che quando si lavora con i thread essa
-sarà la stessa per tutti, ma esistono molti casi in cui sarebbe invece utile
-che ogni singolo thread avesse la sua directory di lavoro. 
+del singolo processo; questo significa che quando si lavora con i
+\itindex{thread} \textit{thread} essa sarà la stessa per tutti, ma esistono
+molti casi in cui sarebbe invece utile che ogni singolo \itindex{thread}
+\textit{thread} avesse la sua directory di lavoro.
 
 Per risolvere questi problemi, riprendendo una interfaccia già presente in
 Solaris, a fianco delle normali funzioni che operano sui file (come
 
 Per risolvere questi problemi, riprendendo una interfaccia già presente in
 Solaris, a fianco delle normali funzioni che operano sui file (come
@@ -1096,13 +1099,13 @@ stesso.
 L'idea è che si apra prima la directory che si vuole usare come base dei
 pathname relativo, e si passi il file descriptor alla funzione che userà
 quella directory come punto di partenza per la risoluzione.\footnote{in questo
 L'idea è che si apra prima la directory che si vuole usare come base dei
 pathname relativo, e si passi il file descriptor alla funzione che userà
 quella directory come punto di partenza per la risoluzione.\footnote{in questo
-  modo, anche quando si lavora con i thread, si può mantenere anche una
-  directory di lavoro diversa per ciascuno di essi.}  Con queste funzioni si
-possono anche ottenere grossi aumenti di prestazioni quando si devono eseguire
-operazioni su delle sezioni di albero dei file che prevedono gerarchie molto
-profonde e grandi quantità di file e directory, dato che basta eseguire la
-risoluzione di un pathname una sola volta (nell'apertura della directory) e
-non per ciascun file che essa contiene.
+  modo, anche quando si lavora con i \itindex{thread} \textit{thread}, si può
+  mantenere anche una directory di lavoro diversa per ciascuno di essi.}  Con
+queste funzioni si possono anche ottenere grossi aumenti di prestazioni quando
+si devono eseguire operazioni su delle sezioni di albero dei file che
+prevedono gerarchie molto profonde e grandi quantità di file e directory, dato
+che basta eseguire la risoluzione di un pathname una sola volta (nell'apertura
+della directory) e non per ciascun file che essa contiene.
 
 La sintassi generale di queste nuove funzioni è che esse prendano come primo
 argomento il file descriptor della directory da usare come base, mentre gli
 
 La sintassi generale di queste nuove funzioni è che esse prendano come primo
 argomento il file descriptor della directory da usare come base, mentre gli
@@ -1137,15 +1140,15 @@ l'argomento \param{dirfd}.\footnote{non staremo pertanto a riportarli uno per
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|l|}
+  \begin{tabular}[c]{|l|c|l|}
     \hline
     \hline
-    \textbf{Funzione} & \textbf{Corrispondente} \\
+    \textbf{Funzione} &\textbf{Flags} \textbf{Corrispondente} \\
     \hline
     \hline
     \hline
     \hline
-     \func{faccessat} &\func{access}  \\
-     \func{fchmodat}  &\func{chmod}   \\
-     \func{fchownat}  &\func{chown}   \\
-     \func{fstatat}   &\func{stat}    \\
+     \func{faccessat} & --     &\func{access}  \\
+     \func{fchmodat}  &$\bullet$\func{chmod}   \\
+     \func{fchownat}  &\func{chown},\func{lchown}    \\
+     \func{fstatat}   &\func{stat},\func{lstat}    \\
      \func{futimesat} &\func{utimes}  \\
      \func{linkat}    &\func{link}    \\
      \func{mkdirat}   &\func{mkdir}   \\
      \func{futimesat} &\func{utimes}  \\
      \func{linkat}    &\func{link}    \\
      \func{mkdirat}   &\func{mkdir}   \\
@@ -1553,6 +1556,9 @@ operazioni che sono predefinite per qualunque file,\footnote{in particolare
   (cioè di tipo \texttt{int *}) su cui sarà restituito il valore.
 \end{basedescript}
 
   (cioè di tipo \texttt{int *}) su cui sarà restituito il valore.
 \end{basedescript}
 
+% TODO aggiungere FIBMAP e FIEMAP, vedi http://lwn.net/Articles/260832
+
+
 Si noti però come la gran parte di queste operazioni specifiche dei file (per
 essere precisi le prime sei dell'elenco) siano effettuabili in maniera
 generica anche tramite l'uso di \func{fcntl}. Le due funzioni infatti sono
 Si noti però come la gran parte di queste operazioni specifiche dei file (per
 essere precisi le prime sei dell'elenco) siano effettuabili in maniera
 generica anche tramite l'uso di \func{fcntl}. Le due funzioni infatti sono