X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=filedir.tex;h=d2f2de6bbd92945ea106ef065ce4e4c0984ab1d8;hb=70860564e1de946ab8d681bb41c601ba77721709;hp=239c9950e51c5db9d8bcdc0ef509dbf7e1858d35;hpb=ff76d56c6a2c280cbe4f153173488871d7b12336;p=gapil.git diff --git a/filedir.tex b/filedir.tex index 239c995..d2f2de6 100644 --- a/filedir.tex +++ b/filedir.tex @@ -8,6 +8,7 @@ %% license is included in the section entitled "GNU Free Documentation %% License". %% + \chapter{File e directory} \label{cha:files_and_dirs} @@ -432,7 +433,7 @@ stringa con un carattere nullo e la tronca alla dimensione specificata da \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} @@ -828,11 +829,11 @@ il nome del relativo campo; nel nostro caso sono definite le macro 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}. @@ -897,7 +898,7 @@ ed ordinamento) del contenuto di una directory; la funzione \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}. @@ -909,27 +910,33 @@ ed ordinamento) del contenuto di una directory; la funzione 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} @@ -1612,13 +1619,6 @@ cancellare i file che non servono pi 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 @@ -1692,6 +1692,14 @@ nell'ultima colonna di tab.~\ref{tab:file_file_times}. \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; @@ -2596,11 +2604,6 @@ contiene i file. Si tenga presente per 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 @@ -2630,4 +2633,9 @@ programmi e librerie) di cui il server potrebbe avere bisogno. % 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: