Aggiornata stat e messe note per statx e fstatat nelle at-functions.
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 28 Aug 2018 21:25:29 +0000 (23:25 +0200)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 28 Aug 2018 21:25:29 +0000 (23:25 +0200)
filedir.tex
fileio.tex

index 0b958c2..b077277 100644 (file)
@@ -3169,14 +3169,17 @@ specificamente dalla \acr{glibc},\footnote{la funzione è stata introdotta
   \func{mkstemp}.} 
 \end{funcproto}
 \noindent la cui sola differenza è la presenza dell'ulteriore argomento
-\var{flags} che consente di specificare alcuni ulteriori flag
-(\const{O\_APPEND}, \const{O\_CLOEXEC}, \const{O\_SYNC}, il cui significato
+\var{flags} che consente di specificare alcuni ulteriori flag (come
+\const{O\_APPEND}, \const{O\_CLOEXEC}, \const{O\_SYNC}, il cui significato
 vedremo in sez.~\ref{sec:file_open_close}) da passare ad \func{open}
-nell'apertura del file. 
+nell'apertura del file.\footnote{si tenga presente che \func{mkostemp}
+  utilizza già \const{O\_CREAT}, \const{O\_EXCL} e \const{O\_RDWR}, che non è
+  il caso di reindicare, dato che ciò potrebbe portare ad errori in altri
+  sistemi operativi.}
 
-Di queste due funzioni sono state poi introdotte a partire dalla \acr{glibc}
-2.11 due varianti, \funcd{mkstemps} e \funcd{mkostemps} che consentono di
-indicare anche un suffisso, i loro prototipo sono:
+Di queste due funzioni sono state poi introdotte, a partire dalla \acr{glibc}
+2.11 due varianti, \funcd{mkstemps} e \funcd{mkostemps}, che consentono di
+indicare anche un suffisso, i loro prototipi sono:
 
 \begin{funcproto}{
 \fhead{stlib.h}
@@ -3187,16 +3190,16 @@ indicare anche un suffisso, i loro prototipo sono:
 }
 
 {Le funzioni hanno gli stessi valori di ritorno e gli stessi errori di
-  \func{mkstemp} con lo stesso significato tranne \errval{EINVAL} che viene
+  \func{mkstemp} con lo stesso significato, tranne \errval{EINVAL} che viene
   restituito se \param{template} non è di lunghezza pari ad almeno
   $6+$\param{suffixlen} ed i 6 caratteri prima del suffisso non sono
   \code{XXXXXX}.}
 \end{funcproto}
 
-Le due funzioni, estensione non standard delle \acr{glibc}, sono identiche a
-\funcd{mkstemp} e \funcd{mkostemp}, ma consentono di avere un nome del file
-nella forma \texttt{prefissoXXXXXXsuffisso} dove la lunghezza del suffisso
-deve essere indicata con \param{suffixlen}.
+Le due funzioni, un'estensione non standard fornita dalla \acr{glibc}, sono
+identiche a \funcd{mkstemp} e \funcd{mkostemp}, ma consentono di avere un nome
+del file nella forma \texttt{prefissoXXXXXXsuffisso} dove la lunghezza del
+suffisso deve essere indicata con \param{suffixlen}.
 
 Infine con OpenBSD è stata introdotta un'altra funzione simile alle
 precedenti, \funcd{mkdtemp}, che crea invece una directory
@@ -3225,7 +3228,6 @@ directory è sempre atomica i precedenti problemi di \textit{race condition}
 non si pongono.
 
 
-
 \section{La manipolazione delle caratteristiche dei file}
 \label{sec:file_infos}
 
@@ -3310,38 +3312,50 @@ abbastanza chiara, vale la pena illustrare maggiormente il significato dei
 campi di \struct{stat} su cui non torneremo in maggior dettaglio nel resto di
 questa sezione:
 \begin{itemize*}
-
 \item Il campo \var{st\_nlink} contiene il numero di \textit{hard link} che
   fanno riferimento al file (il cosiddetto \textit{link count}) di cui abbiamo
   già parlato in numerose occasioni.
-
 \item Il campo \var{st\_ino} contiene il numero di \textit{inode} del file,
   quello viene usato all'interno del filesystem per identificarlo e che può
   essere usato da un programma per determinare se due \textit{pathname} fanno
   riferimento allo stesso file.
-
 \item Il campo \var{st\_dev} contiene il numero del dispositivo su cui risiede
   il file (o meglio il suo filesystem). Si tratta dello stesso numero che si
   usa con \func{mknod} e che può essere decomposto in \textit{major number} e
   \textit{minor number} con le macro \macro{major} e \macro{minor} viste in
   sez.~\ref{sec:file_mknod}.
-
 \item Il campo \var{st\_rdev} contiene il numero di dispositivo associato al
   file stesso ed ovviamente ha un valore significativo soltanto quando il file
   è un dispositivo a caratteri o a blocchi.
-
 \item Il campo \var{st\_blksize} contiene la dimensione dei blocchi di dati
   usati nell'I/O su disco, che è anche la dimensione usata per la
   bufferizzazione dei dati dalle librerie del C per l'interfaccia degli
   \textit{stream}.  Leggere o scrivere blocchi di dati in dimensioni inferiori
   a questo valore è inefficiente in quanto le operazioni su disco usano
   comunque trasferimenti di questa dimensione.
-
 \end{itemize*}
 
-% TODO trattare anche statx, aggiunta con il kernel 4.11 (vedi
-% https://lwn.net/Articles/707602/ e
-% https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a528d35e8bfcc521d7cb70aaf03e1bd296c8493f) 
+Nell'evoluzione del kernel la \textit{system call} che fornisce \func{stat} è
+stata modificata più volte per tener conto dei cambiamenti fatti alla
+struttura \struct{stat},\footnote{questo ha significato l'utilizzo a basso
+  livello di diverse \textit{system call} e diverse versioni della struttura.}
+in particolare a riguardo ai tempi dei file, di cui è stata aumentata la
+precisione (torneremo su questo in sez.~\ref{sec:file_file_times}) ma anche
+per gli aggiornamenti fatti ai campi \var{st\_ino}, \var{st\_uid} e
+\var{st\_gid}. Sulle piattaforme a 32 bit questi cambiamenti, che han visto un
+aumento delle dimensioni dei campi della struttura per adattarli alle nuove
+esigenze, sono mascherati dalla \acr{glibc} che attraverso \func{stat} invoca
+la versione più recente della \textit{system call} e reimpacchetta i dati se
+questo è necessario per eseguire dei vecchi programmi. Nelle piattaforme a 64
+bit invece è presente un'unica versione della \textit{system call} e la
+struttura \struct{stat} ha campi di dimensione sufficiente.
+
+Infine a partire dal kernel 2.6.16 è stata introdutta una ulteriore funzione
+della famiglia, \func{fstatat} che consente di trattare con sicurezza i
+\textit{pathname} relativi, la tratteremo in sez.~\ref{sec:file_openat},
+insieme alla nuova \textit{system call} \func{statx}, introdotta dal kernel
+4.11 per estendere l'interfaccia di \func{stat} e le informazioni che essa può
+restituire. 
 
 
 \subsection{I tipi di file}
@@ -3354,14 +3368,6 @@ tab.~\ref{tab:file_file_types}).  Il tipo di file viene ritornato dalle
 funzioni della famiglia \func{stat} all'interno del campo \var{st\_mode} di
 una struttura \struct{stat}. 
 
-Il campo \var{st\_mode} è una maschera binaria in cui l'informazione viene
-suddivisa nei vari bit che compongono, ed oltre a quelle sul tipo di file,
-contiene anche le informazioni relative ai permessi su cui torneremo in
-sez.~\ref{sec:file_perm_overview}. Dato che i valori numerici usati per
-definire il tipo di file possono variare a seconda delle implementazioni, lo
-standard POSIX definisce un insieme di macro che consentono di verificare il
-tipo di file in maniera standardizzata.
-
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -3383,6 +3389,14 @@ tipo di file in maniera standardizzata.
   \label{tab:file_type_macro}
 \end{table}
 
+Il campo \var{st\_mode} è una maschera binaria in cui l'informazione viene
+suddivisa nei vari bit che compongono, ed oltre a quelle sul tipo di file,
+contiene anche le informazioni relative ai permessi su cui torneremo in
+sez.~\ref{sec:file_perm_overview}. Dato che i valori numerici usati per
+definire il tipo di file possono variare a seconda delle implementazioni, lo
+standard POSIX definisce un insieme di macro che consentono di verificare il
+tipo di file in maniera standardizzata.
+
 Queste macro vengono usate anche da Linux che supporta pure le estensioni allo
 standard per i collegamenti simbolici e i socket definite da BSD.\footnote{le
   ultime due macro di tab.~\ref{tab:file_type_macro}, che non sono presenti
index b1e84f8..4b364ec 100644 (file)
@@ -1694,6 +1694,13 @@ tab.~\ref{tab:file_atfunc_corr}, oltre al nuovo argomento iniziale, è prevista
 anche l'aggiunta di un ulteriore argomento finale, \param{flags}.
 
 
+
+
+% TODO trattare fstatat e con essa
+% TODO trattare anche statx, aggiunta con il kernel 4.11 (vedi
+% https://lwn.net/Articles/707602/ e
+% https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a528d35e8bfcc521d7cb70aaf03e1bd296c8493f) 
+
 % 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/