+Benché non rientri nelle \textit{at-functions} previste nello standard
+POSIX.1-2008, tratteremo qui anche la funzione di sistema \funcd{statx},
+introdotta con il kernel 4.11 e disponibile dalle versione 2.28 della
+\acr{glibc}, il cui prototipo è:
+
+\begin{funcproto}{
+\fhead{sys/types.h}
+\fhead{sys/stat.h}
+\fhead{unistd.h}
+\fhead{fcntl.h}
+\fdecl{int statx(int dirfd, const char *pathname, int flags, \\
+\phantom{int statx(}unsigned int mask, struct statx *statxbuf)}
+\fdesc{Legge le informazioni di un file.}
+}
+
+{La funzione ritorna gli stessi valori e gli stessi codici di errore di
+ \func{stat}, \func{fstat}, o \func{lstat} a seconda del valore di
+ \param{flags}, ed in più:
+ \begin{errlist}
+ \item[\errcode{EBADF}] \param{dirfd} non è un file descriptor valido.
+ \item[\errcode{EINVAL}] \param{flags} non ha un valore valido o \param{mask}
+ ha un valore riservato.
+ \item[\errcode{ENOTDIR}] \param{pathname} è un \textit{pathname} relativo,
+ ma \param{dirfd} fa riferimento ad un file.
+ \end{errlist}
+}
+\end{funcproto}
+
+La funzione è una estensione specifica di Linux consente di leggere le
+informazioni di un file; ha la stessa sintassi di \func{fstatat} utilizzando
+con lo stesso significato gli argomenti \param{dirfd} e \param{pathname} ed i
+valori \const{AT\_EMPTY\_PATH}, \const{AT\_NO\_AUTOMOUNT} e
+\const{AT\_SYMLINK\_NOFOLLOW} per \param{flags}. Si può pertanto indicare il
+file di cui si vogliono ottenere i dati con un \textit{pathname} assoluto, con
+un \textit{pathname} relativo (sia alla directory corrente che a quella
+indicata da \param{dirfd}) o con un file descriptor ad esso associato.
+
+La funzione però consente di ottenere informazioni più dettagliate rispetto a
+quelle fornite dalle funzioni tradizionali come \func{stat} e \func{fstatat},
+ed è in grado di controllare le modalità con cui le ottiene nel caso un file
+sia posto su un filesystem remoto. Per questo, oltre ai tre valori
+precedenti, l'argomento \param{flags} consente anche gli ulteriori valori
+elencati in tab.~\ref{tab:statx_flags_const}, con il significato ivi
+illustrato.
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|p{8cm}|}
+ \hline
+ \textbf{Costante} & \textbf{Significato} \\
+ \hline
+ \hline
+ \constd{AT\_STATX\_SYNC\_AS\_STAT}& si comporta esattamente come
+ \func{stat}, in questo caso (il default
+ se non viene indicato niente) il
+ risultato dipende dal tipo di
+ filesystem.\\
+ \constd{AT\_STATX\_FORCE\_SYNC}& richiede che i valori degli attributi
+ richiesti siano, in caso di un filesystem
+ di rete, siano sincronizzati con il server
+ remoto, questo può forzare una scrittura
+ dei dati (in particolare i tempi del file)
+ verso lo stesso.\\
+ \constd{AT\_STATX\_DONT\_SYNC} & chiede di non sincronizzare nessun dato,
+ ritornando quanto presente nella cache,
+ questo significa che i dati potrebbero
+ essere non coerenti ed aggiornati, ma si
+ evita, in caso di filesystem di rete, la
+ necessità di contattare il server remoto.\\
+ \hline
+ \end{tabular}
+ \caption{Valori specifici di \func{statx} per l'argomento \param{flags}.}
+ \label{tab:statx_flags_const}
+\end{table}
+
+La funzione restituisce le informazioni relative al file richiesto nella
+struttura \struct{statx} puntata dall'argomento \param{statxbuf}. Inoltre
+data la quantità di informazioni che possono essere richieste, la funzione
+consente, con l'argomento \param{mask} di selezionare quelle volute, questa
+deve essere assegnata ad una maschera binaria dei valori illustrati in
+tab.~\ref{tab:statx_mask_const}.
+
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|l|}
+ \hline
+ \textbf{Costante} & \textbf{Significato} \\
+ \hline
+ \hline
+ \constd{STATX\_TYPE} & Tipo del file (\texttt{stx\_mode \& S\_IFMT}).\\
+ \constd{STATX\_MODE} & Permessi del file (\texttt{stx\_mode \&
+ \tild{}S\_IFMT}).\\
+ \constd{STATX\_NLINK} & Numero di collegamenti (\textit{hard link},
+ \texttt{stx\_nlink}).\\
+ \constd{STATX\_UID} & Proprietario del file (per \ids{UID},
+ \texttt{stx\_uid}).\\
+ \constd{STATX\_GID} & Gruppo proprietario del file (per \ids{GID},
+ \texttt{stx\_gid}).\\
+ \constd{STATX\_ATIME} & Tempo di ultimo accesso (\texttt{stx\_atime}).\\
+ \constd{STATX\_MTIME} & Tempo di ultima modifica (\texttt{stx\_mtime}).\\
+ \constd{STATX\_CTIME} & Tempo di ultimo cambiamento (\texttt{stx\_mtime}).\\
+ \constd{STATX\_INO} & Numero di \textit{inode} (\texttt{stx\_ino}).\\
+ \constd{STATX\_SIZE} & Dimensione del file (\texttt{stx\_size}).\\
+ \constd{STATX\_BLOCKS}& Numero di blocchi del file (\texttt{stx\_blocks}).\\
+ \constd{STATX\_BASIC\_STATS}& Tutte le informazioni precedenti.\\
+ \constd{STATX\_BTIME} & Tempo di creazione (\texttt{stx\_btime}).\\
+% \constd{}& .\\
+ \constd{STATX\_ALL} & Tutte le informazioni.\\
+ \hline
+ \end{tabular}
+ \caption{Le costanti per i valori dell'argomento \param{mask} di
+ \func{statx}.}
+ \label{tab:statx_mask_const}
+\end{table}
+
+Si tenga presente che il kernel accetta non richiede che \param{mask} contenga
+solo i flag di tab.~\ref{tab:statx_mask_const}, valori ulteriori in genere
+vengono usualmente ignorati ma non si può comunque indicare un valore
+qualunque in quanto alcuni bit sono riservati per future
+estensioni.\footnote{in particolare il bit \constd{STATX\_\_RESERVED} che se
+ usato causa il fallimento della funzione con un errore di \errval{EINVAL}.}
+Inoltre non è detto che tutte le informazioni richieste con \param{mask} siano
+disponibili, per questo il kernel restituisce in un opportuno campo della
+struttura \struct{statx}, \val{stx\_mask}, quali sono i dati effettivamente
+restituiti, che possono in alcuni casi essere anche di più di quelli richiesti
+(se l'informazione aggiuntiva è ottenuta senza costi ulteriori) per cui è
+normale che questo valore possa essere diverso da quanto richiesto.
+
+In particolare se un filesystem ha dei campi che non sono supportati o con
+valori che non hanno corrispondenza in un sistema unix-like, questi potranno
+essere restituiti con valori fittizi se disponibili (ad esempio gli \ids{UID}
+e \ids{GID} impostati in fase di montaggio per filesystem che non supportano
+gli utenti) ma il relativo bit in \val{stx\_mask} sarà comunque
+cancellato. Infine è possibile che campi diversi possano avere informazioni
+ottenute in momenti diversi per cui in caso di cambiamenti al file eseguiti in
+concorrenza a \func{statx} si possono ottenere campi con valori precedenti o
+posteriori il cambiamento.
+
+
+\begin{figure}[!htb]
+ \footnotesize
+ \centering
+ \begin{minipage}[c]{0.8\textwidth}
+ \includestruct{listati/statx.h}
+ \end{minipage}
+ \normalsize
+ \caption{La struttura \structd{statx} per la lettura delle informazioni dei
+ file.}
+ \label{fig:file_statx_struct}
+\end{figure}
+
+
+Si è riportata in fig.~\ref{fig:file_statx_struct} la definizione della
+struttura \struct{statx} come presente in \headfile{sys/stat.h}.
+