%% license is included in the section entitled "GNU Free Documentation
%% License".
%%
+
\chapter{File e directory}
\label{cha:files_and_dirs}
\begin{figure}[htb]
\centering
- \includegraphics[width=9cm]{img/link_loop}
+ \includegraphics[width=8cm]{img/link_loop}
\caption{Esempio di loop nel filesystem creato con un link simbolico.}
\label{fig:file_link_loop}
\end{figure}
Per quanto riguarda il significato dei campi opzionali, il campo \var{d\_type}
indica il tipo di file (fifo, directory, link simbolico, ecc.); i suoi
possibili valori\footnote{fino alla versione 2.1 delle \acr{glibc} questo
- campo, pur presente nella struttura, non è implementato, e resta sempre al
+ campo, pur presente nella struttura, non era implementato, e resta sempre al
valore \const{DT\_UNKNOWN}.} sono riportati in
-tab.~\ref{tab:file_dtype_macro}; per la conversione da e verso l'analogo valore
-mantenuto dentro il campo \var{st\_mode} di \struct{stat} sono definite anche
-due macro di conversione \macro{IFTODT} e \macro{DTTOIF}:
+tab.~\ref{tab:file_dtype_macro}; per la conversione da e verso l'analogo
+valore mantenuto dentro il campo \var{st\_mode} di \struct{stat} sono definite
+anche due macro di conversione \macro{IFTODT} e \macro{DTTOIF}:
\begin{functions}
\funcdecl{int IFTODT(mode\_t MODE)} Converte il tipo di file dal formato di
\var{st\_mode} a quello di \var{d\_type}.
\funcd{scandir}\footnote{in Linux questa funzione è stata introdotta fin dalle
libc4.} ed il suo prototipo è:
\begin{prototype}{dirent.h}{int scandir(const char *dir,
- struct dirent ***namelist, int(*select)(const struct dirent *),
+ struct dirent ***namelist, int(*filter)(const struct dirent *),
int(*compar)(const struct dirent **, const struct dirent **))}
Esegue una scansione di un \textit{directory stream}.
Al solito, per la presenza fra gli argomenti di due puntatori a funzione, il
prototipo non è molto comprensibile; queste funzioni però sono quelle che
controllano rispettivamente la selezione di una voce (quella passata con
-l'argomento \param{select}) e l'ordinamento di tutte le voci selezionate
+l'argomento \param{filter}) e l'ordinamento di tutte le voci selezionate
(quella specificata dell'argomento \param{compar}).
La funzione legge tutte le voci della directory indicata dall'argomento
-\param{dir}, passando ciascuna di esse (una struttura \struct{dirent}) come
-argomento della funzione di selezione specificata da \param{select}; se questa
-ritorna un valore diverso da zero la voce viene inserita in un vettore che
-viene allocato dinamicamente con \func{malloc}. Qualora si specifichi un
-valore \val{NULL} per \func{select} vengono selezionate tutte le voci.
+\param{dir}, passando un puntatore a ciascuna di esse (una struttura
+\struct{dirent}) come argomento della funzione di selezione specificata da
+\param{filter}; se questa ritorna un valore diverso da zero il puntatore viene
+inserito in un vettore che viene allocato dinamicamente con \func{malloc}.
+Qualora si specifichi un valore \val{NULL} per l'argomento \func{filter} non
+viene fatta nessuna selezione e si ottengono tutte le voci presenti.
Le voci selezionate possono essere riordinate tramite \func{qsort}, le modalità
del riordinamento possono essere personalizzate usando la funzione
-\param{compar} come criterio di ordinamento di\func{qsort}, la funzione prende
-come argomenti le due strutture \struct{dirent} da confrontare restituendo un
-valore positivo, nullo o negativo per indicarne l'ordinamento; alla fine
-l'indirizzo della lista delle strutture \struct{dirent} così ordinate viene
-restituito nell'argomento \param{namelist}.
-
-Per l'ordinamento (vale a dire come valori possibili per l'argomento
-\param{compar}) sono disponibili anche due funzioni predefinite,
-\funcd{alphasort} e \funcd{versionsort}, i cui prototipi sono:
+\param{compar} come criterio di ordinamento di \func{qsort}, la funzione
+prende come argomenti le due strutture \struct{dirent} da confrontare
+restituendo un valore positivo, nullo o negativo per indicarne l'ordinamento;
+alla fine l'indirizzo della lista ordinata dei puntatori alle strutture
+\struct{dirent} viene restituito nell'argomento
+\param{namelist}.\footnote{la funzione alloca automaticamente la lista, e
+ restituisce, come \itindex{value~result~argument} \textit{value result
+ argument}, l'indirizzo della stessa; questo significa che \param{namelist}
+ deve essere dichiarato come \code{struct dirent **namelist} ed alla funzione
+ si deve passare il suo indirizzo.}
+
+Per l'ordinamento, vale a dire come valori possibili per l'argomento
+\param{compar} sono disponibili due funzioni predefinite, \funcd{alphasort} e
+\funcd{versionsort}, i cui prototipi sono:
\begin{functions}
\headdecl{dirent.h}
il programma \cmd{leafnode} cancella i vecchi articoli sulla base di questo
tempo).
-Il tempo di ultima modifica invece viene usato da \cmd{make} per decidere
-quali file necessitano di essere ricompilati o (talvolta insieme anche al
-tempo di cambiamento di stato) per decidere quali file devono essere
-archiviati per il backup. Il comando \cmd{ls} (quando usato con le opzioni
-\cmd{-l} o \cmd{-t}) mostra i tempi dei file secondo lo schema riportato
-nell'ultima colonna di tab.~\ref{tab:file_file_times}.
-
\begin{table}[htb]
\centering
\footnotesize
\label{tab:file_times_effects}
\end{table}
+
+Il tempo di ultima modifica invece viene usato da \cmd{make} per decidere
+quali file necessitano di essere ricompilati o (talvolta insieme anche al
+tempo di cambiamento di stato) per decidere quali file devono essere
+archiviati per il backup. Il comando \cmd{ls} (quando usato con le opzioni
+\cmd{-l} o \cmd{-t}) mostra i tempi dei file secondo lo schema riportato
+nell'ultima colonna di tab.~\ref{tab:file_file_times}.
+
L'effetto delle varie funzioni di manipolazione dei file sui tempi è
illustrato in tab.~\ref{tab:file_times_effects}. Si sono riportati gli effetti
sia per il file a cui si fa riferimento, sia per la directory che lo contiene;
replicare all'interno della \textit{chroot jail} tutti i file (in genere
programmi e librerie) di cui il server potrebbe avere bisogno.
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "gapil"
-%%% End:
-
% LocalWords: sez like filesystem unlink MacOS Windows VMS inode kernel unistd
% LocalWords: un'etichetta int const char oldpath newpath errno EXDEV EPERM st
% LocalWords: EEXIST EMLINK EACCES ENAMETOOLONG ENOTDIR EFAULT ENOMEM EROFS ls
% LocalWords: gid Control List patch mandatory control execute group other all
% LocalWords: dell' effective passwd IGID locking swap saved text IRWXU IRWXG
% LocalWords: IRWXO ext reiser capability FSETID mask capabilities chroot jail
-% LocalWords: FTP Di
+% LocalWords: FTP Di filter reiserfs
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: