\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\textwidth}
\includestruct{listati/file_system_type.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/inode.h}
\end{minipage}
\normalsize
\hline
\hline
\textsl{\code{create}} & Chiamata per creare un nuovo file (vedi
- sez.~\ref{sec:file_open}).\\
+ sez.~\ref{sec:file_open_close}).\\
\textsl{\code{link}} & Crea un \textit{hard link} (vedi
sez.~\ref{sec:link_symlink_rename}).\\
\textsl{\code{unlink}} & Cancella un \textit{hard link} (vedi
detta funzione.} Questo avviene perché su Linux l'apertura di un file
richiede comunque un'altra operazione che mette in gioco l'omonimo oggetto del
VFS: l'allocazione di una struttura di tipo \kstruct{file} che viene associata
-ad ogni file aperto nel sistema.
-
-I motivi per cui viene usata una struttura a parte sono diversi, anzitutto,
-come illustrato in sez.~\ref{sec:file_fd}, questa è necessaria per le
-operazioni eseguite dai processi con l'interfaccia dei file descriptor; ogni
-processo infatti mantiene il riferimento ad una struttura \kstruct{file} per
-ogni file che ha aperto, ed è tramite essa che esegue le operazioni di I/O.
+ad ogni file aperto nel sistema. I motivi per cui viene usata una struttura a
+parte sono diversi, anzitutto, come illustrato in sez.~\ref{sec:file_fd},
+questa è necessaria per le operazioni eseguite dai processi con l'interfaccia
+dei file descriptor. Ogni processo infatti mantiene il riferimento ad una
+struttura \kstruct{file} per ogni file che ha aperto, ed è tramite essa che
+esegue le operazioni di I/O. Inoltre il kernel mantiene un elenco di tutti i
+file aperti nella \itindex{file~table} \textit{file table}.
Inoltre se le operazioni relative agli \textit{inode} fanno riferimento ad
oggetti posti all'interno di un filesystem e vi si applicano quindi le
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/file.h}
\end{minipage}
\normalsize
\textbf{Funzione} & \textbf{Operazione} \\
\hline
\hline
- \textsl{\code{open}} & Apre il file (vedi sez.~\ref{sec:file_open}).\\
+ \textsl{\code{open}} & Apre il file (vedi
+ sez.~\ref{sec:file_open_close}).\\
\textsl{\code{read}} & Legge dal file (vedi sez.~\ref{sec:file_read}).\\
\textsl{\code{write}} & Scrive sul file (vedi
sez.~\ref{sec:file_write}).\\
\textsl{\code{llseek}} & Sposta la posizione corrente sul file (vedi
sez.~\ref{sec:file_lseek}).\\
\textsl{\code{ioctl}} & Accede alle operazioni di controllo
- (vedi sez.~\ref{sec:file_ioctl}).\\
+ (vedi sez.~\ref{sec:file_fcntl_ioctl}).\\
\textsl{\code{readdir}}& Legge il contenuto di una directory (vedi
sez.~\ref{sec:file_dir_read}).\\
\textsl{\code{poll}} & Usata nell'I/O multiplexing (vedi
tutte le directory del filesystem, ma su alcuni filesystem è possibile
impostarla a livello di singole directory o per i sottorami di una directory
con il comando \cmd{chattr}.\footnote{questo avviene tramite delle opportune
- \texttt{ioctl} (vedi sez.~\ref{sec:file_ioctl}).}
+ \texttt{ioctl} (vedi sez.~\ref{sec:file_fcntl_ioctl}).}
Questo consente di ridurre al minimo il rischio di perdita dei dati delle
directory in caso di crollo improvviso del sistema, al costo di una certa
\item[\const{MS\_SYNCHRONOUS}] Abilita la scrittura sincrona richiedendo che
ogni modifica al contenuto del filesystem venga immediatamente registrata su
disco. Lo stesso comportamento può essere ottenuto con il flag
- \const{O\_SYNC} di \func{open} (vedi sez.~\ref{sec:file_open}).
+ \const{O\_SYNC} di \func{open} (vedi sez.~\ref{sec:file_open_close}).
Questa opzione consente di ridurre al minimo il rischio di perdita dei dati
in caso di crollo improvviso del sistema, al costo di una pesante perdita di
\end{funcproto}
\footnotetext{più precisamente la \itindex{capabilities} capacità
- \const{CAP\_SYS\_ADMIN}.}
+ \const{CAP\_SYS\_ADMIN}, vedi sez.~\ref{sec:proc_capabilities}.}
La funzione prende il nome della directory su cui il filesystem è montato e
non il file o il dispositivo che è stato montato,\footnote{questo è vero a
\textbf{Costante} & \textbf{Descrizione}\\
\hline
\hline
- \const{MNT\_FORCE} & forza lo smontaggio del filesystem anche se questo è
+ \const{MNT\_FORCE} & Forza lo smontaggio del filesystem anche se questo è
occupato (presente dai kernel della serie 2.2).\\
- \const{MNT\_DETACH} & esegue uno smontaggio ``\textsl{pigro}'', in cui si
+ \const{MNT\_DETACH} & Esegue uno smontaggio ``\textsl{pigro}'', in cui si
blocca l'accesso ma si aspetta che il filesystem si
liberi (presente dal kernel 2.4.11 e dalla
\acr{glibc} 2.11).\\
- \const{MNT\_EXPIRE} & se non occupato marca un \itindex{mount~point}
+ \const{MNT\_EXPIRE} & Se non occupato marca un \itindex{mount~point}
\textit{mount point} come ``\textsl{in scadenza}'' in
modo che ad una successiva chiamata senza utilizzo
del filesystem questo venga smontato (presente dal
kernel 2.6.8 e dalla \acr{glibc} 2.11).\\
- \const{UMOUNT\_NOFOLLOW}& non dereferenzia \param{target} se questo è un
+ \const{UMOUNT\_NOFOLLOW}& Non dereferenzia \param{target} se questo è un
collegamento simbolico (vedi
sez.~\ref{sec:link_symlink_rename}) evitando
problemi di sicurezza (presente dal kernel 2.6.34).\\
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/statfs.h}
\end{minipage}
\normalsize
con i file descriptor (che tratteremo nel prossimo capitolo), in quanto la
risoluzione del collegamento simbolico viene in genere effettuata dalla
funzione che restituisce il file descriptor (normalmente la \func{open}, vedi
-sez.~\ref{sec:file_open}) e tutte le operazioni seguenti fanno riferimento
-solo a quest'ultimo.
+sez.~\ref{sec:file_open_close}) e tutte le operazioni seguenti fanno
+riferimento solo a quest'ultimo.
Dato che, come indicato in tab.~\ref{tab:file_symb_effect}, funzioni come la
\func{open} seguono i collegamenti simbolici, occorrono funzioni apposite per
lo spazio occupato su disco viene liberato. Si tenga presente comunque che a
questo si aggiunge sempre un'ulteriore condizione e cioè che non ci siano
processi che abbiano il suddetto file aperto.\footnote{come vedremo in
- cap.~\ref{cha:file_unix_interface} il kernel mantiene anche una tabella dei
+ sez.~\ref{sec:file_unix_interface} il kernel mantiene anche una tabella dei
file aperti nei vari processi, che a sua volta contiene i riferimenti agli
\itindex{inode} \textit{inode} ad essi relativi; prima di procedere alla
cancellazione dello spazio occupato su disco dal contenuto di un file il
Ma se la scrittura e l'aggiornamento dei dati delle directory è compito del
kernel, sono molte le situazioni in cui i processi necessitano di poterne
leggere il contenuto. Benché questo possa essere fatto direttamente (vedremo
-in sez.~\ref{sec:file_open} che è possibile aprire una directory come se fosse
-un file, anche se solo in sola lettura) in generale il formato con cui esse
-sono scritte può dipendere dal tipo di filesystem, tanto che, come riportato
-in tab.~\ref{tab:file_file_operations}, il \itindex{Virtual~File~System} VFS
-prevede una apposita funzione per la lettura delle directory.
+in sez.~\ref{sec:file_open_close} che è possibile aprire una directory come se
+fosse un file, anche se solo in sola lettura) in generale il formato con cui
+esse sono scritte può dipendere dal tipo di filesystem, tanto che, come
+riportato in tab.~\ref{tab:file_file_operations}, il
+\itindex{Virtual~File~System} VFS prevede una apposita funzione per la lettura
+delle directory.
\itindbeg{directory~stream}
che ha introdotto una apposita interfaccia per la lettura delle directory,
basata sui cosiddetti \textit{directory stream}, chiamati così per l'analogia
con i \textit{file stream} dell'interfaccia standard ANSI C che vedremo in
-cap.~\ref{cha:files_std_interface}. La prima funzione di questa interfaccia è
+sez.~\ref{sec:files_std_interface}. La prima funzione di questa interfaccia è
\funcd{opendir}, il cui prototipo è:
\begin{funcproto}{
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/dirent.c}
\end{minipage}
\normalsize
della parte iniziale della struttura, basterà sommarci la dimensione massima
dei nomi dei file nel filesystem che si sta usando, che si può ottenere
attraverso la funzione \func{pathconf} (per la quale si rimanda a
-sez.~\ref{sec:sys_pathconf}) più un ulteriore carattere per la terminazione
-della stringa.
+sez.~\ref{sec:sys_file_limits}) più un ulteriore carattere per la terminazione
+della stringa.
Per quanto riguarda il significato dei campi opzionali, il campo \var{d\_type}
indica il tipo di file (se fifo, directory, collegamento simbolico, ecc.), e
Come per \func{mktemp} anche in questo caso \param{template} non può essere
una stringa costante. La funzione apre un file in lettura/scrittura con la
funzione \func{open}, usando l'opzione \const{O\_EXCL} (si veda
-sez.~\ref{sec:file_open}), in questo modo al ritorno della funzione si ha la
-certezza di essere stati i creatori del file, i cui permessi (si veda
+sez.~\ref{sec:file_open_close}), in questo modo al ritorno della funzione si
+ha la certezza di essere stati i creatori del file, i cui permessi (si veda
sez.~\ref{sec:file_perm_overview}) sono impostati al valore \code{0600}
(lettura e scrittura solo per il proprietario).\footnote{questo è vero a
partire dalla \acr{glibc} 2.0.7, le versioni precedenti della \acr{glibc} e
più gli altri eventuali codici di errore di \func{mkdir}.}
\end{funcproto}
-La funzione genera una directory il cui nome è ottenuto sostituendo le
-\code{XXXXXX} finali di \param{template} con permessi \code{0700} (al solito
-si veda cap.~\ref{cha:file_unix_interface} per i dettagli). Dato che la
-creazione della directory è sempre esclusiva i precedenti problemi di
-\itindex{race~condition} \textit{race condition} non si pongono.
+La funzione crea una directory temporanea il cui nome è ottenuto sostituendo
+le \code{XXXXXX} finali di \param{template} con permessi \code{0700} (si veda
+sez.~\ref{sec:file_perm_overview} per i dettagli). Dato che la creazione della
+directory è sempre esclusiva i precedenti problemi di \itindex{race~condition}
+\textit{race condition} non si pongono.
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/stat.h}
\end{minipage}
\normalsize
Benché la descrizione dei commenti di fig.~\ref{fig:file_stat_struct} sia
abbastanza chiara, vale la pena illustrare maggiormente il significato dei
-campi di \structd{stat} su cui non torneremo in maggior dettaglio nel resto di
+campi di \struct{stat} su cui non torneremo in maggior dettaglio nel resto di
questa sezione:
\begin{itemize*}
\textbf{Macro} & \textbf{Tipo del file} \\
\hline
\hline
- \macro{S\_ISREG}\texttt{(m)} & file normale.\\
- \macro{S\_ISDIR}\texttt{(m)} & directory.\\
- \macro{S\_ISCHR}\texttt{(m)} & dispositivo a caratteri.\\
- \macro{S\_ISBLK}\texttt{(m)} & dispositivo a blocchi.\\
- \macro{S\_ISFIFO}\texttt{(m)} & fifo.\\
- \macro{S\_ISLNK}\texttt{(m)} & collegamento simbolico.\\
- \macro{S\_ISSOCK}\texttt{(m)} & socket.\\
+ \macro{S\_ISREG}\texttt{(m)} & File normale.\\
+ \macro{S\_ISDIR}\texttt{(m)} & Directory.\\
+ \macro{S\_ISCHR}\texttt{(m)} & Dispositivo a caratteri.\\
+ \macro{S\_ISBLK}\texttt{(m)} & Dispositivo a blocchi.\\
+ \macro{S\_ISFIFO}\texttt{(m)} & Fifo.\\
+ \macro{S\_ISLNK}\texttt{(m)} & Collegamento simbolico.\\
+ \macro{S\_ISSOCK}\texttt{(m)} & Socket.\\
\hline
\end{tabular}
\caption{Macro per i tipi di file (definite in \headfile{sys/stat.h}).}
\const{S\_IFCHR} & 0020000 & Dispositivo a caratteri.\\
\const{S\_IFIFO} & 0010000 & Fifo.\\
\hline
- \const{S\_ISUID} & 0004000 & \itindex{suid~bit} \acr{suid} bit.\\
- \const{S\_ISGID} & 0002000 & \itindex{sgid~bit} \acr{sgid} bit.\\
- \const{S\_ISVTX} & 0001000 & \itindex{sticky~bit} \acr{sticky} bit.\\
+ \const{S\_ISUID} & 0004000 & Set user ID \itindex{suid~bit} (\acr{suid})
+ bit.\\
+ \const{S\_ISGID} & 0002000 & Set group ID \itindex{sgid~bit}
+ (\acr{sgid}) bit.\\
+ \const{S\_ISVTX} & 0001000 & \itindex{sticky~bit} \acr{Sticky} bit.\\
\hline
\const{S\_IRWXU} & 00700 & Maschera per i permessi del proprietario.\\
\const{S\_IRUSR} & 00400 & Il proprietario ha permesso di lettura.\\
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/utimbuf.h}
\end{minipage}
\normalsize
proprietari del file o avere i privilegi di amministratore. Se invece si è
specificato un valore diverso la funzione avrà successo solo se si è
proprietari del file o se si hanno i privilegi di amministratore.\footnote{per
- essere precisi la \itindex{capabilities} capacità \const{CAP\_FOWNER}.} In
-entrambi i casi per verificare la proprietà del file viene utilizzato
-l'\ids{UID} effettivo del processo.
+ essere precisi la \itindex{capabilities} capacità \const{CAP\_FOWNER}, vedi
+ sez.~\ref{sec:proc_capabilities}.} In entrambi i casi per verificare la
+proprietà del file viene utilizzato l'\ids{UID} effettivo del processo.
Si tenga presente che non è possibile modificare manualmente il tempo di
cambiamento di stato del file, che viene aggiornato direttamente dal kernel
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/timeval.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/timespec.h}
\end{minipage}
\normalsize
di scrittura per la directory.
Avere il permesso di lettura per un file consente di aprirlo con le opzioni
-(si veda quanto riportato in tab.~\ref{tab:file_open_flags}) di sola lettura o
+(si veda quanto riportato in sez.~\ref{sec:file_open_close}) di sola lettura o
di lettura/scrittura e leggerne il contenuto. Avere il permesso di scrittura
consente di aprire un file in sola scrittura o lettura/scrittura e modificarne
il contenuto, lo stesso permesso è necessario per poter troncare il file o per
per cui a differenza dei permessi ordinari esse varranno per qualunque utente
compreso l'amministratore. L'amministratore è l'unico che può attivare o
disattivare questi attributi,\footnote{più precisamente un processo con la
- \itindex{capabilities} capacità \const{CAP\_LINUX\_IMMUTABLE}.} e potendo
-rimuoverli è comunque capace di tornare in grado di eseguire qualunque
-operazione su un file immutabile o \textit{append-only}.
+ \itindex{capabilities} capacità \const{CAP\_LINUX\_IMMUTABLE}, vedi
+ sez.~\ref{sec:proc_capabilities}.} e potendo rimuoverli è comunque capace di
+tornare in grado di eseguire qualunque operazione su un file immutabile o
+\textit{append-only}.
\itindend{file~attributes}
\textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{S\_ISUID} & 04000 & Set user ID \itindex{suid~bit}.\\
- \const{S\_ISGID} & 02000 & Set group ID \itindex{sgid~bit}.\\
- \const{S\_ISVTX} & 01000 & Sticky bit \itindex{sticky~bit}.\\
+ \const{S\_ISUID} & 04000 & Set user ID \itindex{suid~bit} bit.\\
+ \const{S\_ISGID} & 02000 & Set group ID \itindex{sgid~bit} bit.\\
+ \const{S\_ISVTX} & 01000 & Sticky \itindex{sticky~bit} bit.\\
\hline
\const{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
\const{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
Le funzioni \func{chmod} e \func{fchmod} ci permettono di modificare i
permessi di un file, resta però il problema di quali sono i permessi assegnati
quando il file viene creato. Le funzioni dell'interfaccia nativa di Unix, come
-vedremo in sez.~\ref{sec:file_open}, permettono di indicare esplicitamente i
-permessi di creazione di un file, ma questo non è possibile per le funzioni
-dell'interfaccia standard ANSI C che non prevede l'esistenza di utenti e
-gruppi, ed inoltre il problema si pone anche per l'interfaccia nativa quando i
-permessi non vengono indicati esplicitamente.
+vedremo in sez.~\ref{sec:file_open_close}, permettono di indicare
+esplicitamente i permessi di creazione di un file, ma questo non è possibile
+per le funzioni dell'interfaccia standard ANSI C che non prevede l'esistenza
+di utenti e gruppi, ed inoltre il problema si pone anche per l'interfaccia
+nativa quando i permessi non vengono indicati esplicitamente.
\itindbeg{umask}
\subsection{La gestione della titolarità dei file}
\label{sec:file_ownership_management}
-Vedremo in sez.~\ref{sec:file_base_func} con quali funzioni si possono creare
+Vedremo in sez.~\ref{sec:file_open_close} con quali funzioni si possono creare
nuovi file, in tale occasione vedremo che è possibile specificare in sede di
creazione quali permessi applicare ad un file, però non si può indicare a
quale utente e gruppo esso deve appartenere. Lo stesso problema si presenta
\textbf{Tipo} & \textbf{Descrizione} \\
\hline
\hline
- \const{ACL\_USER\_OBJ} & voce che contiene i diritti di accesso del
+ \const{ACL\_USER\_OBJ} & Voce che contiene i diritti di accesso del
proprietario del file.\\
- \const{ACL\_USER} & voce che contiene i diritti di accesso per
+ \const{ACL\_USER} & Voce che contiene i diritti di accesso per
l'utente indicato dal rispettivo
qualificatore.\\
- \const{ACL\_GROUP\_OBJ}& voce che contiene i diritti di accesso del
+ \const{ACL\_GROUP\_OBJ}& Voce che contiene i diritti di accesso del
gruppo proprietario del file.\\
- \const{ACL\_GROUP} & voce che contiene i diritti di accesso per
+ \const{ACL\_GROUP} & Voce che contiene i diritti di accesso per
il gruppo indicato dal rispettivo
qualificatore.\\
- \const{ACL\_MASK} & voce che contiene la maschera dei massimi
+ \const{ACL\_MASK} & Voce che contiene la maschera dei massimi
permessi di accesso che possono essere garantiti
da voci del tipo \const{ACL\_USER},
\const{ACL\_GROUP} e \const{ACL\_GROUP\_OBJ}.\\
- \const{ACL\_OTHER} & voce che contiene i diritti di accesso di chi
+ \const{ACL\_OTHER} & Voce che contiene i diritti di accesso di chi
non corrisponde a nessuna altra voce dell'ACL.\\
\hline
\end{tabular}
Un secondo aspetto dell'incidenza delle ACL sul comportamento del sistema è
quello relativo alla creazione di nuovi file,\footnote{o oggetti sul
filesystem, il comportamento discusso vale per le funzioni \func{open} e
- \func{creat} (vedi sez.~\ref{sec:file_open}), \func{mkdir} (vedi
+ \func{creat} (vedi sez.~\ref{sec:file_open_close}), \func{mkdir} (vedi
sez.~\ref{sec:file_dir_creat_rem}), \func{mknod} e \func{mkfifo} (vedi
sez.~\ref{sec:file_mknod}).} che come accennato può essere modificato dalla
presenza di una \textit{Default ACL} sulla directory che andrà a contenerli.
\textbf{Tipo} & \textbf{Descrizione} \\
\hline
\hline
- \const{ACL\_TYPE\_ACCESS} & indica una ACL di accesso.\\
- \const{ACL\_TYPE\_DEFAULT}& indica una ACL di default.\\
+ \const{ACL\_TYPE\_ACCESS} & Indica una ACL di accesso.\\
+ \const{ACL\_TYPE\_DEFAULT}& Indica una ACL di default.\\
\hline
\end{tabular}
\caption{Le costanti che identificano il tipo di ACL.}
\textbf{Tipo} & \textbf{Descrizione} \\
\hline
\hline
- \const{TEXT\_ABBREVIATE} & stampa le voci in forma abbreviata.\\
+ \const{TEXT\_ABBREVIATE} & Stampa le voci in forma abbreviata.\\
\const{TEXT\_NUMERIC\_IDS} & non effettua la risoluzione numerica di
\ids{UID} e \ids{GID}.\\
- \const{TEXT\_SOME\_EFFECTIVE}& per ciascuna voce che contiene permessi che
+ \const{TEXT\_SOME\_EFFECTIVE}& Per ciascuna voce che contiene permessi che
vengono eliminati dalla \const{ACL\_MASK}
viene generato un commento con i permessi
effettivamente risultanti; il commento è
separato con un tabulatore.\\
- \const{TEXT\_ALL\_EFFECTIVE} & viene generato un commento con i permessi
+ \const{TEXT\_ALL\_EFFECTIVE} & Viene generato un commento con i permessi
effettivi per ciascuna voce che contiene
permessi citati nella \const{ACL\_MASK},
anche quando questi non vengono modificati
da essa; il commento è separato con un
tabulatore.\\
- \const{TEXT\_SMART\_INDENT} & da usare in combinazione con le precedenti
- \const{TEXT\_SOME\_EFFECTIVE} e
- \const{TEXT\_ALL\_EFFECTIVE} aumenta
+ \const{TEXT\_SMART\_INDENT} & Da usare in combinazione con le precedenti
+ opzioni \const{TEXT\_SOME\_EFFECTIVE} e
+ \const{TEXT\_ALL\_EFFECTIVE}, aumenta
automaticamente il numero di spaziatori
prima degli eventuali commenti in modo da
mantenerli allineati.\\
}
\end{funcproto}
-Ottenuta con \func{acl\_size} la dimensione per il buffer lo si potrà allocare
-direttamente con \func{malloc}. La rappresentazione binaria di una ACL si
-potrà poi ottenere con la funzione \funcd{acl\_copy\_ext}, il cui prototipo è:
+Ottenuta con \func{acl\_size} la dimensione per il buffer di una ACL lo si
+potrà allocare direttamente con \func{malloc}. La rappresentazione binaria di
+una ACL si potrà invece ottenere con la funzione \funcd{acl\_copy\_ext}, il
+cui prototipo è:
\begin{funcproto}{
\fhead{sys/types.h}
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.9\textwidth}
\includestruct{listati/dqblk.h}
\end{minipage}
\normalsize
\textbf{Identificatore} & \textbf{Descrizione} \\
\hline
\hline
- \const{QFMT\_VFS\_OLD}& il vecchio (ed obsoleto) formato delle quote.\\
- \const{QFMT\_VFS\_V0} & la versione 0 usata dal VFS di Linux, supporta
+ \const{QFMT\_VFS\_OLD}& Il vecchio (ed obsoleto) formato delle quote.\\
+ \const{QFMT\_VFS\_V0} & La versione 0 usata dal VFS di Linux, supporta
\ids{UID} e \ids{GID} a 32 bit e limiti fino a
$2^{42}$ byte e $2^{32}$ file.\\
- \const{QFMT\_VFS\_V1} & la versione 1 usata dal VFS di Linux, supporta
+ \const{QFMT\_VFS\_V1} & La versione 1 usata dal VFS di Linux, supporta
\ids{UID} e \ids{GID} a 32 bit e limiti fino a
$2^{64}$ byte e $2^{64}$ file.\\
\hline
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/dqinfo.h}
\end{minipage}
\normalsize
\itindex{sticky~bit} \textit{sticky bit} nella cancellazione dei file (vedi
sez.~\ref{sec:file_special_perm}), la possibilità di impostare il flag di
\const{O\_NOATIME} con \func{open} e \func{fcntl} (vedi
-sez.~\ref{sec:file_open} e sez.~\ref{sec:file_fcntl}) senza restrizioni.
+sez.~\ref{sec:file_open_close} e sez.~\ref{sec:file_fcntl_ioctl}) senza
+restrizioni.
Una seconda capacità che copre diverse operazioni, in questo caso riguardanti
la rete, è \const{CAP\_NET\_ADMIN}, che consente di impostare le opzioni
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.8\textwidth}
\includestruct{listati/cap_user_header_t.h}
\end{minipage}
\normalsize