Documentati O_PATH (fine) e O_NOFOLLOW
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 6 Nov 2018 22:09:28 +0000 (23:09 +0100)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 6 Nov 2018 22:09:28 +0000 (23:09 +0100)
filedir.tex
fileio.tex

index c78d42a926d6ad8f78434f421b6ec042e7c77ffc..90e731ed20cb0229a536f63412314f1814abc5eb 100644 (file)
@@ -407,7 +407,7 @@ per i dati in essi contenuti.
 \end{figure}
 
 Se si va ad esaminare con maggiore dettaglio la strutturazione
 \end{figure}
 
 Se si va ad esaminare con maggiore dettaglio la strutturazione
-dell'informazione all'interno del filesystem \textsl{ext2}, tralasciando i
+dell'informazione all'interno del filesystem \acr{ext2}, tralasciando i
 dettagli relativi al funzionamento del filesystem stesso come la
 strutturazione in gruppi dei blocchi, il \textit{superblock} e tutti i dati di
 gestione possiamo esemplificare la situazione con uno schema come quello
 dettagli relativi al funzionamento del filesystem stesso come la
 strutturazione in gruppi dei blocchi, il \textit{superblock} e tutti i dati di
 gestione possiamo esemplificare la situazione con uno schema come quello
@@ -514,7 +514,7 @@ tre, in quanto adesso sarà referenziata anche dalla voce ``\texttt{..}'' di
 \itindend{inode}
 
 
 \itindend{inode}
 
 
-\subsection{Alcuni dettagli sul filesystem \textsl{ext2} e successori}
+\subsection{Alcuni dettagli sul filesystem \acr{ext2} e successori}
 \label{sec:file_ext2}
 
 Benché non esista ``il'' filesystem di Linux, dato che esiste un supporto
 \label{sec:file_ext2}
 
 Benché non esista ``il'' filesystem di Linux, dato che esiste un supporto
@@ -525,7 +525,7 @@ grande sviluppo e diverse evoluzioni, fra cui l'aggiunta del
 \textit{journaling} con il passaggio ad \acr{ext3}, che probabilmente è ancora
 il filesystem più diffuso, ed una serie di ulteriori miglioramenti con il
 successivo \acr{ext4}. In futuro è previsto che questo debba essere sostituito
 \textit{journaling} con il passaggio ad \acr{ext3}, che probabilmente è ancora
 il filesystem più diffuso, ed una serie di ulteriori miglioramenti con il
 successivo \acr{ext4}. In futuro è previsto che questo debba essere sostituito
-da un filesystem completamente diverso, \acr{btrfs}, che dovrebbe diventare il
+da un filesystem completamente diverso, \acr{Btrfs}, che dovrebbe diventare il
 filesystem standard di Linux, ma questo al momento è ancora in fase di
 sviluppo.\footnote{si fa riferimento al momento dell'ultima revisione di
   questo paragrafo, l'inizio del 2012.}
 filesystem standard di Linux, ma questo al momento è ancora in fase di
 sviluppo.\footnote{si fa riferimento al momento dell'ultima revisione di
   questo paragrafo, l'inizio del 2012.}
@@ -597,8 +597,8 @@ lo schema in fig.~\ref{fig:file_ext2_dirs}; in questo modo è possibile
 implementare nomi per i file anche molto lunghi (fino a 1024 caratteri) senza
 sprecare spazio disco.
 
 implementare nomi per i file anche molto lunghi (fino a 1024 caratteri) senza
 sprecare spazio disco.
 
-Con l'introduzione del filesystem \textit{ext3} sono state introdotte diverse
-modifiche strutturali, la principale di queste è quella che \textit{ext3} è un
+Con l'introduzione del filesystem \acr{ext3} sono state introdotte diverse
+modifiche strutturali, la principale di queste è quella che \acr{ext3} è un
 filesystem \textit{journaled}, è cioè in grado di eseguire una registrazione
 delle operazioni di scrittura su un giornale (uno speciale file interno) in
 modo da poter garantire il ripristino della coerenza dei dati del
 filesystem \textit{journaled}, è cioè in grado di eseguire una registrazione
 delle operazioni di scrittura su un giornale (uno speciale file interno) in
 modo da poter garantire il ripristino della coerenza dei dati del
@@ -610,7 +610,7 @@ filesystem\footnote{si noti bene che si è parlato di dati \textsl{del}
 della corrente o di crollo del sistema che abbia causato una interruzione
 della scrittura dei dati sul disco.
 
 della corrente o di crollo del sistema che abbia causato una interruzione
 della scrittura dei dati sul disco.
 
-Oltre a questo \textit{ext3} introduce ulteriori modifiche volte a migliorare
+Oltre a questo \acr{ext3} introduce ulteriori modifiche volte a migliorare
 sia le prestazioni che la semplicità di gestione del filesystem, in
 particolare per le directory si è passato all'uso di alberi binari con
 indicizzazione tramite \textit{hash} al posto delle \textit{linked list} che
 sia le prestazioni che la semplicità di gestione del filesystem, in
 particolare per le directory si è passato all'uso di alberi binari con
 indicizzazione tramite \textit{hash} al posto delle \textit{linked list} che
@@ -2363,8 +2363,8 @@ ecc.), e consente di evitare una successiva chiamata a \func{lstat} (vedi
 sez.~\ref{sec:file_stat}) per determinarlo. I suoi possibili valori sono
 riportati in tab.~\ref{tab:file_dtype_macro}. Si tenga presente che questo
 valore è disponibile solo per i filesystem che ne supportano la restituzione
 sez.~\ref{sec:file_stat}) per determinarlo. I suoi possibili valori sono
 riportati in tab.~\ref{tab:file_dtype_macro}. Si tenga presente che questo
 valore è disponibile solo per i filesystem che ne supportano la restituzione
-(fra questi i più noti sono \textsl{btrfs}, \textsl{ext2}, \textsl{ext3}, e
-\textsl{ext4}), per gli altri si otterrà sempre il valore
+(fra questi i più noti sono \acr{Btrfs}, \acr{ext2}, \acr{ext3}, e
+\acr{ext4}), per gli altri si otterrà sempre il valore
 \const{DT\_UNKNOWN}.\footnote{inoltre fino alla versione 2.1 della
   \acr{glibc}, pur essendo il campo \var{d\_type} presente, il suo uso non era
   implementato, e veniva restituito comunque il valore \const{DT\_UNKNOWN}.}
 \const{DT\_UNKNOWN}.\footnote{inoltre fino alla versione 2.1 della
   \acr{glibc}, pur essendo il campo \var{d\_type} presente, il suo uso non era
   implementato, e veniva restituito comunque il valore \const{DT\_UNKNOWN}.}
@@ -4662,8 +4662,8 @@ in particolare accade che:
   quando l'\ids{UID} effettivo del processo è zero.
 \end{enumerate*}
 
   quando l'\ids{UID} effettivo del processo è zero.
 \end{enumerate*}
 
-Per alcuni filesystem\footnote{i filesystem più comuni (\textsl{ext2},
-  \textsl{ext3}, \textsl{ext4}, \textsl{xfs}, \texttt{btrfs}) supportano
+Per alcuni filesystem\footnote{i filesystem più comuni (\acr{ext2},
+  \acr{ext3}, \acr{ext4}, \acr{XFS}, \acr{Btrfs}) supportano
   questa caratteristica, che è mutuata da BSD.} è inoltre prevista
 un'ulteriore misura di sicurezza, volta a scongiurare l'abuso dei bit
 \acr{suid} e \acr{sgid}; essa consiste nel cancellare automaticamente questi
   questa caratteristica, che è mutuata da BSD.} è inoltre prevista
 un'ulteriore misura di sicurezza, volta a scongiurare l'abuso dei bit
 \acr{suid} e \acr{sgid}; essa consiste nel cancellare automaticamente questi
@@ -4986,11 +4986,11 @@ che ogni valore precedente sia sovrascritto.
 
 Si tenga presente che non tutti i filesystem supportano gli \textit{Extended
   Attributes}; al momento della scrittura di queste dispense essi sono
 
 Si tenga presente che non tutti i filesystem supportano gli \textit{Extended
   Attributes}; al momento della scrittura di queste dispense essi sono
-presenti solo sui vari \textsl{extN}, \textsl{ReiserFS}, \textsl{JFS},
-\textsl{XFS}, \textsl{Btrfs}, \textsl{Lustre} e \textsl{OCFS2}.  Inoltre a
+presenti solo sui vari \acr{extN}, \acr{ReiserFS}, \acr{JFS},
+\acr{XFS}, \acr{Btrfs}, \acr{Lustre} e \acr{OCFS2}.  Inoltre a
 seconda della implementazione ci possono essere dei limiti sulla quantità di
 attributi che si possono utilizzare.\footnote{ad esempio nel caso di
 seconda della implementazione ci possono essere dei limiti sulla quantità di
 attributi che si possono utilizzare.\footnote{ad esempio nel caso di
-  \textsl{ext2} ed \textsl{ext3} è richiesto che essi siano contenuti
+  \acr{ext2} ed \acr{ext3} è richiesto che essi siano contenuti
   all'interno di un singolo blocco, pertanto con dimensioni massime pari a
   1024, 2048 o 4096 byte a seconda delle dimensioni di quest'ultimo impostate
   in fase di creazione del filesystem, mentre con \textsl{XFS} e
   all'interno di un singolo blocco, pertanto con dimensioni massime pari a
   1024, 2048 o 4096 byte a seconda delle dimensioni di quest'ultimo impostate
   in fase di creazione del filesystem, mentre con \textsl{XFS} e
@@ -6172,14 +6172,14 @@ che ne fanno parte. Si può così porre dei limiti sul contenuto di un ramo di
 albero.
 
 Il meccanismo prevede che per ciascun filesystem che supporta le quote disco
 albero.
 
 Il meccanismo prevede che per ciascun filesystem che supporta le quote disco
-(i vari \textit{extN}, \textit{btrfs}, \textit{XFS}, \textit{JFS},
-\textit{ReiserFS}) il kernel provveda sia a mantenere aggiornati i dati
-relativi al consumo delle risorse da parte degli utenti e dei gruppi (e del
-progetto), che a far rispettare i limiti imposti dal sistema, con la
-generazione di un errore di \errcode{EDQUOT} per tutte le operazioni sui file
-che porterebbero ad un superamento degli stessi. Si tenga presente che questi
-due compiti sono separati, il primo si attiva al montaggio del filesystem con
-il supporto per le quote, il secondo deve essere abilitato esplicitamente.
+(i vari \acr{extN}, \acr{Btrfs}, \acr{XFS}, \acr{JFS}, \acr{ReiserFS}) il
+kernel provveda sia a mantenere aggiornati i dati relativi al consumo delle
+risorse da parte degli utenti e dei gruppi (e del progetto), che a far
+rispettare i limiti imposti dal sistema, con la generazione di un errore di
+\errcode{EDQUOT} per tutte le operazioni sui file che porterebbero ad un
+superamento degli stessi. Si tenga presente che questi due compiti sono
+separati, il primo si attiva al montaggio del filesystem con il supporto per
+le quote, il secondo deve essere abilitato esplicitamente.
 
 Per il mantenimento dei dati di consumo delle risorse vengono usati due file
 riservati nella directory radice del filesystem su cui si sono attivate le
 
 Per il mantenimento dei dati di consumo delle risorse vengono usati due file
 riservati nella directory radice del filesystem su cui si sono attivate le
@@ -6776,7 +6776,7 @@ librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  version libcap lcap clear ncap caps pag capgetp CapInh CapPrm RT
 % LocalWords:  fffffeff CapEff getcap scheduling lookup  dqinfo SETINFO GETFMT
 % LocalWords:  NEWNS unshare nice NUMA ioctl journaling close XOPEN fdopendir
 % LocalWords:  version libcap lcap clear ncap caps pag capgetp CapInh CapPrm RT
 % LocalWords:  fffffeff CapEff getcap scheduling lookup  dqinfo SETINFO GETFMT
 % LocalWords:  NEWNS unshare nice NUMA ioctl journaling close XOPEN fdopendir
-% LocalWords:  btrfs mkostemp extN ReiserFS JFS Posix usrquota grpquota EDQUOT
+% LocalWords:  Btrfs mkostemp extN ReiserFS JFS Posix usrquota grpquota EDQUOT
 % LocalWords:  aquota quotacheck limit grace period quotactl cmd caddr addr dqb
 % LocalWords:  QUOTAON ENODEV ENOPKG ENOTBLK GETQUOTA SETQUOTA SETUSE SETQLIM
 % LocalWords:  forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME dqstats
 % LocalWords:  aquota quotacheck limit grace period quotactl cmd caddr addr dqb
 % LocalWords:  QUOTAON ENODEV ENOPKG ENOTBLK GETQUOTA SETQUOTA SETUSE SETQLIM
 % LocalWords:  forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME dqstats
index acbedc27d3b7796663f76093366286280f7d25b3..dc5bdfa2d45b291a0e6ff3304af097350b9a5f30 100644 (file)
@@ -258,7 +258,7 @@ corrispondente,\footnote{è \func{open} che alloca \kstruct{file}, la inserisce
     supporta la funzionalità.
   \item[\errcode{EFBIG}] il file è troppo grande per essere aperto, in genere
     dovuto al fatto che si è compilata una applicazione a 32 bit senza
     supporta la funzionalità.
   \item[\errcode{EFBIG}] il file è troppo grande per essere aperto, in genere
     dovuto al fatto che si è compilata una applicazione a 32 bit senza
-    abilitare il supporto per le dimesioni a 64 bit; questo è il valore
+    abilitare il supporto per le dimensioni a 64 bit; questo è il valore
     restituito fino al kernel 2.6.23, coi successivi viene restituito
     \errcode{EOVERFLOW} come richiesto da POSIX.1.
   \item[\errcode{ELOOP}] si sono incontrati troppi collegamenti simbolici nel
     restituito fino al kernel 2.6.23, coi successivi viene restituito
     \errcode{EOVERFLOW} come richiesto da POSIX.1.
   \item[\errcode{ELOOP}] si sono incontrati troppi collegamenti simbolici nel
@@ -451,6 +451,11 @@ sez.~\ref{sec:file_fcntl_ioctl}).
                             aggiunta in Linux a partire dal kernel
                             2.1.126, ed utilizzabile soltanto se si è definita
                             la macro \macro{\_GNU\_SOURCE}.\\
                             aggiunta in Linux a partire dal kernel
                             2.1.126, ed utilizzabile soltanto se si è definita
                             la macro \macro{\_GNU\_SOURCE}.\\
+      \const{O\_TMPFILE} & Consente di creare un file temporaneo anonimo, non
+                           visibile con un pathname sul filesystem, ma
+                           leggibile e scrivibile all'interno del processo.
+                           Introdotto con il kernel 3.11, è specifico di
+                           Linux.\\ 
       \constd{O\_TRUNC}  & Se usato su un file di dati aperto in scrittura,
                            ne tronca la lunghezza a zero; con un terminale o
                            una \textit{fifo} viene ignorato, negli altri casi
       \constd{O\_TRUNC}  & Se usato su un file di dati aperto in scrittura,
                            ne tronca la lunghezza a zero; con un terminale o
                            una \textit{fifo} viene ignorato, negli altri casi
@@ -471,7 +476,7 @@ Si è riportato in tab.~\ref{tab:open_time_flag} l'elenco dei flag delle
 \textsl{modalità di apertura}.\footnote{la \acr{glibc} definisce anche i due
   flag \constd{O\_SHLOCK}, che aprirebbe il file con uno \textit{shared lock}
   e \constd{O\_EXLOCK} che lo aprirebbe con un \textit{exclusive lock} (vedi
 \textsl{modalità di apertura}.\footnote{la \acr{glibc} definisce anche i due
   flag \constd{O\_SHLOCK}, che aprirebbe il file con uno \textit{shared lock}
   e \constd{O\_EXLOCK} che lo aprirebbe con un \textit{exclusive lock} (vedi
-  sez.~\ref{sec:file_locking}, si tratta di opzioni specifiche di BSD, che non
+  sez.~\ref{sec:file_locking}), si tratta di opzioni specifiche di BSD, che non
   esistono con Linux.}  Uno di questi, \const{O\_EXCL}, ha senso solo se usato
 in combinazione a \const{O\_CREAT} quando si vuole creare un nuovo file per
 assicurarsi che questo non esista di già, e lo si usa spesso per creare i
   esistono con Linux.}  Uno di questi, \const{O\_EXCL}, ha senso solo se usato
 in combinazione a \const{O\_CREAT} quando si vuole creare un nuovo file per
 assicurarsi che questo non esista di già, e lo si usa spesso per creare i
@@ -481,7 +486,7 @@ Si tenga presente che questa opzione è supportata su NFS solo a partire da
 NFSv3 e con il kernel 2.6, nelle versioni precedenti la funzionalità viene
 emulata controllando prima l'esistenza del file per cui usarla per creare un
 file di lock potrebbe dar luogo a una \textit{race condition}, in tal caso
 NFSv3 e con il kernel 2.6, nelle versioni precedenti la funzionalità viene
 emulata controllando prima l'esistenza del file per cui usarla per creare un
 file di lock potrebbe dar luogo a una \textit{race condition}, in tal caso
-infatto un file potrebbe venir creato fra il controllo la successiva apertura
+infatti un file potrebbe venir creato fra il controllo la successiva apertura
 con \const{O\_CREAT}; la cosa si può risolvere comunque creando un file con un
 nome univoco ed usando la funzione \func{link} per creare il file di lock,
 (vedi sez.~\ref{sec:ipc_file_lock}).
 con \const{O\_CREAT}; la cosa si può risolvere comunque creando un file con un
 nome univoco ed usando la funzione \func{link} per creare il file di lock,
 (vedi sez.~\ref{sec:ipc_file_lock}).
@@ -505,6 +510,56 @@ tab.~\ref{tab:file_file_times} vengono impostati al tempo corrente. Se invece
 si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
 \textit{modification time} e lo \textit{status change time}.
 
 si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
 \textit{modification time} e lo \textit{status change time}.
 
+Il flag \constd{O\_TMPFILE}, introdotto con il kernel
+3.11,\footnote{inizialmente solo su alcuni filesystem (i vari \acr{extN},
+  \acr{Minix}, \acr{UDF}, \acr{shmem}) poi progressivamente esteso ad altri
+  (\acr{XFS} con il 3.15, \acr{Btrfs} e \acr{F2FS} con il 3.16, \acr{ubifs}
+  con il 4.9).}  consente di aprire un file temporaneo senza che questo venga
+associato ad un nome e compaia nel filesystem. In questo caso la funzione
+restituirà un file descriptor da poter utilizzare per leggere e scrivere dati,
+ma il contenuto dell'argomento \param{path} verrà usato solamente per
+determinare, in base alla directory su cui si verrebbe a trovare il
+\textit{pathname} indicato, il filesystem all'interno del quale deve essere
+allocato l'\textit{inode} e lo spazio disco usato dal file
+descriptor. L'\textit{inode} resterà anonimo e l'unico riferimento esistente
+sarà quello contenuto nella \textit{file table} del processo che ha chiamato
+\func{open}.
+
+Lo scopo principale del flag è quello fornire una modalità atomica, semplice e
+sicura per applicare la tecnica della creazione di un file temporaneo seguita
+dalla sua immediata cancellazione con \func{unlink} per non lasciare rimasugli
+sul filesystem, di cui è parlato in sez.~\ref{sec:link_symlink_rename}.
+Inoltre, dato che il file non compare nel filesystem, si evitano alla radice
+tutti gli eventuali problemi di \textit{race condition} o \textit{symlink
+  attack} e non ci si deve neanche preoccupare di ottenere un opportuno nome
+univoco con l'uso delle funzioni di sez.~\ref{sec:file_temp_file}.
+
+Una volta aperto il file vi si potrà leggere o scrivere a seconda che siano
+utilizzati \const{O\_RDWR} o \const{O\_WRONLY}, mentre l'uso di
+\func{O\_RDONLY} non è consentito, non avendo molto senso ottenere un file
+descriptor da cui non si potrà comunque mai leggere nulla. L'unico altro flag
+che può essere utilizzato insieme a \const{O\_TMPFILE} è \const{O\_EXCL}, che
+in questo caso assume però un significato diverso da quello ordinario, dato
+che in questo caso non avrebbe senso fallire se il file non esiste, dato che
+questo è sempre vero.
+
+L'uso di \const{O\_EXCL} attiene all'altro possibile impiego di
+\const{O\_TMPFILE} oltre a quello della creazione sicura di un file temporaneo
+come sostituto di \func{tmpfile}: la possibilità di creare un eventuale
+contenuto iniziale ed impostare permessi, proprietario e attributi estesi con
+\func{fchmod}, \func{fchown} e \func{fsetxattr} operando sul file descriptor,
+senza possibilità di \textit{race condition} ed interferenze esterne, per poi
+far apparire il tutto sul filesystem in un secondo tempo utilizzando
+\func{linkat} sul file descriptor (torneremo su questo in
+sez.~\ref{sec:file_openat}) per dargli un nome. Questa operazione però non
+sarà possibile se si è usato \const{O\_EXCL}, che in questo caso viene ad
+assumere il significato di escludere la possibilità di far esistere il file
+anche in un secondo tempo.
+
+% NOTE: per O_TMPFILE vedi: http://kernelnewbies.org/Linux_3.11
+% https://lwn.net/Articles/558598/ http://lwn.net/Articles/619146/
+
+
 \begin{table}[!htb]
   \centering
   \footnotesize
 \begin{table}[!htb]
   \centering
   \footnotesize
@@ -542,7 +597,7 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
                            l'impostazione della suddetta modalità con
                            \func{fcntl} (vedi
                            sez.~\ref{sec:file_fcntl_ioctl}).\\ 
                            l'impostazione della suddetta modalità con
                            \func{fcntl} (vedi
                            sez.~\ref{sec:file_fcntl_ioctl}).\\ 
-      \constd{O\_DIRECT} & Esegue l'I/O direttamente dalla memoria in
+      \const{O\_DIRECT}  & Esegue l'I/O direttamente dalla memoria in
                            \textit{user space} in maniera sincrona, in modo da
                            scavalcare i meccanismi di bufferizzazione del
                            kernel. Introdotto con il kernel 2.4.10 ed
                            \textit{user space} in maniera sincrona, in modo da
                            scavalcare i meccanismi di bufferizzazione del
                            kernel. Introdotto con il kernel 2.4.10 ed
@@ -592,11 +647,6 @@ si tronca il file con \const{O\_TRUNC} verranno impostati soltanto il
                            dell'arrivo degli stessi e della parte di metadati
                            ad essi relativa sull'hardware sottostante (in
                            questo significato solo dal kernel 2.6.33).\\
                            dell'arrivo degli stessi e della parte di metadati
                            ad essi relativa sull'hardware sottostante (in
                            questo significato solo dal kernel 2.6.33).\\
-      \const{O\_TMPFILE} & Consente di creare un file temporaneo anonimo, non
-                           visibile con un pathname sul filesystem, ma
-                           leggibile e scrivibile all'iterno del processo.
-                           Introdotto con il kernel 3.11, è specifico di
-                           Linux.\\ 
       \hline
     \end{tabular}
     \caption{Le costanti che identificano le \textit{modalità di operazione} di
       \hline
     \end{tabular}
     \caption{Le costanti che identificano le \textit{modalità di operazione} di
@@ -628,7 +678,7 @@ specifica di definirlo in fase di apertura del file, è sempre opportuno
 attivarlo in un secondo tempo con \func{fcntl} (vedi
 sez.~\ref{sec:file_fcntl_ioctl}).
 
 attivarlo in un secondo tempo con \func{fcntl} (vedi
 sez.~\ref{sec:file_fcntl_ioctl}).
 
-Il flag \const{O\_DIRECT} non è previsto da nessuno standard, anche se è
+Il flag \constd{O\_DIRECT} non è previsto da nessuno standard, anche se è
 presente in alcuni kernel unix-like.\footnote{il flag è stato introdotto dalla
   SGI in IRIX, ma è presente senza limiti di allineamento dei buffer anche in
   FreeBSD.} Per i kernel della serie 2.4 si deve garantire che i buffer in
 presente in alcuni kernel unix-like.\footnote{il flag è stato introdotto dalla
   SGI in IRIX, ma è presente senza limiti di allineamento dei buffer anche in
   FreeBSD.} Per i kernel della serie 2.4 si deve garantire che i buffer in
@@ -656,7 +706,7 @@ completamente equivalente all'uso di \const{O\_SYNC} che garantisce anche
 sulla scrittura sincrona dei metadati associati alla scrittura dei dati del
 file.\footnote{la situazione si complica ulteriormente per NFS, in cui l'uso
   del flag disabilita la bufferizzazione solo dal lato del client, e può
 sulla scrittura sincrona dei metadati associati alla scrittura dei dati del
 file.\footnote{la situazione si complica ulteriormente per NFS, in cui l'uso
   del flag disabilita la bufferizzazione solo dal lato del client, e può
-  causare problemi di prestazioni.} Per questo in genere è opportuno se si usa
+  causare problemi di prestazioni.} Per questo in genere se si usa
 \const{O\_DIRECT} è opportuno richiedere anche \const{O\_SYNC}.
 
 Si tenga presente infine che la implementazione di \const{O\_SYNC} di Linux
 \const{O\_DIRECT} è opportuno richiedere anche \const{O\_SYNC}.
 
 Si tenga presente infine che la implementazione di \const{O\_SYNC} di Linux
@@ -697,7 +747,6 @@ all'identificazione di una posizione sul filesystem (ad uso delle
 operazioni che riguardano il file descriptor in quanto tale, senza consentire
 operazioni sul file; in sostanza se si apre un file con \const{O\_PATH} si
 potrà soltanto:
 operazioni che riguardano il file descriptor in quanto tale, senza consentire
 operazioni sul file; in sostanza se si apre un file con \const{O\_PATH} si
 potrà soltanto:
-
 \begin{itemize*}
 \item usare il file descriptor come indicatore della directory di partenza con
   una delle \textit{at-functions} (vedi sez.~\ref{sec:file_openat});
 \begin{itemize*}
 \item usare il file descriptor come indicatore della directory di partenza con
   una delle \textit{at-functions} (vedi sez.~\ref{sec:file_openat});
@@ -714,24 +763,34 @@ potrà soltanto:
     flags} con \func{fcntl} (rispettivamente con le operazioni
   \const{F\_GETFL}, \const{F\_SETFD} e \const{F\_GETFD}, vedi
   sez.~\ref{sec:file_fcntl_ioctl}).
     flags} con \func{fcntl} (rispettivamente con le operazioni
   \const{F\_GETFL}, \const{F\_SETFD} e \const{F\_GETFD}, vedi
   sez.~\ref{sec:file_fcntl_ioctl}).
-\item chiudere il file con \func{close};
+\item chiudere il file con \func{close}.
 \end{itemize*}
 
 \end{itemize*}
 
-In realtà usando \const{O\_PATH} il file non viene effettivamente aperto per
+In realtà usando \const{O\_PATH} il file non viene effettivamente aperto, per
 cui ogni tentativo di usare il file descriptor così ottenuto con funzioni che
 operano effettivamente sul file (come ad esempio \func{read}, \func{write},
 cui ogni tentativo di usare il file descriptor così ottenuto con funzioni che
 operano effettivamente sul file (come ad esempio \func{read}, \func{write},
-\func{fchown}, \func{fchmod}, \func{ioctl}, ecc.) fallirano con un errore di
-\errval{EBADF}, come se questo non fosse un file descriptor valido.
+\func{fchown}, \func{fchmod}, \func{ioctl}, ecc.) fallirà con un errore di
+\errval{EBADF}, come se questo non fosse un file descriptor valido. Per questo
+motivo usando questo flag non è necessario avere nessun permesso per aprire un
+file, neanche quello di lettura (occorre ovviamente avere il permesso di
+esecuzione per le directory sovrastanti).
+
+Questo consente di usare il file descriptor con funzioni che non richiedono
+permessi sul file, come \func{fstat}, laddove un'apertura con
+\const{O\_RDONLY} sarebbe fallita. I permessi verranno eventualmente
+controllati, se necessario, nelle operazioni seguenti, ad esempio per usare
+\func{fchdir} con il file descriptor (se questo fa riferimento ad una
+directory) occorrerà avere il permesso di esecuzione.
 
 Se si usa \const{O\_PATH} tutti gli altri flag eccettuati \const{O\_CLOEXEC},
 
 Se si usa \const{O\_PATH} tutti gli altri flag eccettuati \const{O\_CLOEXEC},
-\const{O\_DIRECTORY} e \const{O\_NOFOLLOW} verranno ignorati.
-
-% TODO: aggiungere O_TMPFILE per la creazione di file temporanei senza che
-% questi appaiano sul filesystem, introdotto con il 3.11, vedi:
-% https://lwn.net/Articles/556512/, http://kernelnewbies.org/Linux_3.11
-% https://lwn.net/Articles/558598/ http://lwn.net/Articles/619146/
-
-
+\const{O\_DIRECTORY} e \const{O\_NOFOLLOW} verranno ignorati. I primi due
+mantengono il loro significato usuale, mentre \const{O\_NOFOLLOW} fa si che se
+il file indicato è un un link simbolico venga aperto quest'ultimo (cambiando
+quindi il comportamento ordinario che prova il fallimento della chiamata),
+così da poter usare il file descriptor ottenuto per le funzioni
+\func{fchownat}, \func{fstatat}, \func{linkat} e \func{readlinkat} che ne
+supportano l'uso come come primo argomento (torneremo su questo in
+sez.~\ref{sec:file_openat}).
 
 
 Nelle prime versioni di Unix i valori di \param{flag} specificabili per
 
 
 Nelle prime versioni di Unix i valori di \param{flag} specificabili per
@@ -1774,7 +1833,12 @@ anche l'aggiunta di un ulteriore argomento finale, \param{flags}.
 
 % TODO manca prototipo di linkat, verificare se metterlo o metter menzione
 % altre modifiche al riguardo nel 3.11 (AT_EMPTY_PATH?) vedi
 
 % TODO manca prototipo di linkat, verificare se metterlo o metter menzione
 % altre modifiche al riguardo nel 3.11 (AT_EMPTY_PATH?) vedi
-% http://lwn.net/Articles/562488/ 
+% http://lwn.net/Articles/562488/
+
+% TODO: Trattare esempio di inzializzazione di file e successivo collegamento
+% con l'uso di O_TMPFILE e linkat, vedi man open
+
+
 % TODO manca prototipo di utimensat, verificare se metterlo o metter menzione
 % TODO manca prototipo di renameat2, introdotta nel 3.15, vedi
 % http://lwn.net/Articles/569134/ 
 % TODO manca prototipo di utimensat, verificare se metterlo o metter menzione
 % TODO manca prototipo di renameat2, introdotta nel 3.15, vedi
 % http://lwn.net/Articles/569134/ 
@@ -4406,5 +4470,8 @@ con uno dei valori \const{FSETLOCKING\_INTERNAL} o
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
-%  LocalWords:  l'I nell' du vm Documentation Urlich Drepper futimesat times
-%  LocalWords:  futimens fs Tread all'I ll
+
+% LocalWords:  nell' du vm Documentation Urlich Drepper futimesat times
+%  LocalWords:  futimens fs Tread all'I ll TMPFILE EDQUOT extN Minix UDF XFS
+%  LocalWords:  shmem Btrfs ubifs tmpfile fchmod fchown fsetxattr fchdir PF
+%  LocalWords:  fstatfs sull'