+Per il settaggio delle caratteristiche particolari di ciascun filesystem si
+usa invece l'argomento \param{data} che serve per passare le ulteriori
+informazioni necessarie, che ovviamente variano da filesystem a filesystem.
+
+La funzione \func{mount} può essere utilizzata anche per effettuare il
+\textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo
+alcune delle caratteristiche di funzionamento (ad esempio passare da sola
+lettura a lettura/scrittura). Questa operazione è attivata attraverso uno dei
+bit di \param{mountflags}, \macro{MS\_REMOUNT}, che se settato specifica che
+deve essere effettuato il rimontaggio del filesystem (con le opzioni
+specificate dagli altri bit), anche in questo caso il valore di \param{source}
+viene ignorato.
+
+
+Una volta che non si voglia più utilizzare un certo filesystem è possibile
+\textsl{smontarlo} usando la funzione \func{umount}, il cui prototipo è:
+\begin{prototype}{sys/mount.h}{umount(const char *target)}
+
+ Smonta il filesystem montato sulla directory \param{target}.
+
+ \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
+ fallimento, nel qual caso \var{errno} viene settata a:
+ \begin{errlist}
+ \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
+ \item[\macro{EBUSY}] \param{target} è la directory di lavoro di qualche
+ processo, o contiene dei file aperti, o un altro mount point.
+ \end{errlist}
+ ed inoltre \macro{ENOTDIR}, \macro{EFAULT}, \macro{ENOMEM},
+ \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
+\end{prototype}
+\noindent 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 partire dal kernel 2.3.99-pre7, prima esistevano due chiamate
+ separate e la funzione poteva essere usata anche specificando il file di
+ dispositivo.}, in quanto con il kernel 2.4.x è possibile montare lo stesso
+dispositivo in più punti. Nel caso più di un filesystem sia stato montato
+sullo stesso \textit{mount point} viene smontato quello che è stato montato
+per ultimo.
+
+Si tenga presente che la funzione fallisce quando il filesystem è
+\textsl{occupato}, questo avviene quando ci sono ancora file aperti sul
+filesystem, se questo contiene la directory di lavoro corrente di un qualunque
+processo o il mount point di un altro filesystem; in questo caso l'errore
+restituito è \macro{EBUSY}.
+
+Linux provvede inoltre una seconda funzione, \func{umount2}, che in alcuni
+casi permette di forzare lo smontaggio di un filesystem, anche quando questo
+risulti occupato; il suo prototipo è:
+\begin{prototype}{sys/mount.h}{umount2(const char *target, int flags)}
+
+ La funzione è identica a \func{umount} per comportamento e codici di errore,
+ ma con \param{flags} si può specificare se forzare lo smontaggio.
+\end{prototype}
+
+Il valore di \param{flags} è una maschera binaria, e al momento l'unico valore
+definito è il bit \macro{MNT\_FORCE}; gli altri bit devono essere nulli.
+Specificando \macro{MNT\_FORCE} la funzione cercherà di liberare il filesystem
+anche se è occupato per via di una delle condizioni descritte in precedenza. A
+seconda del tipo di filesystem alcune (o tutte) possono essere superate,
+evitando l'errore di \macro{EBUSY}. In tutti i casi prima dello smontaggio
+viene eseguita una sincronizzazione dei dati.
+
+Altre due funzioni specifiche di Linux\footnote{esse si trovano anche su BSD,
+ ma con una struttura diversa}, utili per ottenere in maniera diretta
+informazioni riguardo al filesystem su cui si trova un certo file, sono
+\func{statfs} e \func{fstatfs}, i cui prototipi sono:
+\begin{functions}
+ \headdecl{sys/vfs.h} \funcdecl{int statfs(const char *path, struct statfs
+ *buf)} \funcdecl{int fstatfs(int fd, struct statfs *buf)} Restituisce in
+ \param{buf} le informazioni relative al filesystem su cui è posto il file
+ specificato.
+
+ \bodydesc{Li funzioni restituiscono 0 in caso di successo e -1 in caso di
+ errore, nel qual caso \var{errno} viene settato ai valori:
+ \begin{errlist}
+ \item[\macro{ENOSYS}] il filesystem su cui si trova il file specificato non
+ supporta la funzione.
+ \end{errlist}
+ e \macro{EFAULT} ed \macro{EIO} per entrambe, \macro{EBADF} per
+ \func{fstatfs}, \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
+ \macro{EACCES}, \macro{ELOOP} per \func{statfs}.}
+\end{functions}
+
+Queste funzioni permettono di ottenere una serie di informazioni generali
+riguardo al filesystem su cui si trova il file specificato; queste vengono
+restituite una struttura \param{buf} definita come:
+\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
+ struct statfs {
+ long f_type; /* tipo di filesystem */
+ long f_bsize; /* dimensione ottimale dei blocchi di I/O */
+ long f_blocks; /* blocchi totali nel filesystem */
+ long f_bfree; /* blocchi liberi nel filesystem */
+ long f_bavail; /* blocchi liberi agli utenti normali */
+ long f_files; /* inodes totali nel filesystem */
+ long f_ffree; /* inodes liberi nel filesystem */
+ fsid_t f_fsid; /* filesystem id */
+ long f_namelen; /* lunghezza massima dei nomi dei file */
+ long f_spare[6]; /* riservati per uso futuro */
+ };
+\end{lstlisting}
+ed i campi che sono indefiniti per il filesystem in esame sono settati a zero.
+I valori del campo \var{f\_type} sono definiti per i vari filesystem nei
+relativi file di header dei sorgenti del kernel da costanti del tipo
+\macro{XXX\_SUPER\_MAGIC}, dove \macro{XXX} in genere è il nome del filesystem
+stesso.
+
+Le \acr{glibc} provvedono infine una serie di funzioni per la gestione dei due
+file standard \file{/etc/fstab} e \file{/etc/mtab}, che convenzionalmente sono
+usati in quasi tutti i sistemi unix per mantenere rispettivamente le
+informazioni riguardo ai filesystem da montare e a quelli correntemente
+montati. Le funzioni servono a leggere il contenuto di questi file in
+opportune strutture \var{struct fstab} e \var{struct mntent}, e, per
+\file{/etc/mtab} per inserire e rimuovere le voci presenti nel file.
+
+In generale si dovrebbero usare queste funzioni (in particolar modo quelle
+relative a \file{/etc/mtab}), quando si debba scrivere un programma che
+effettua il montaggio di un filesystem; in realtà in questi casi è molto più
+semplice invocare direttamente il programma \cmd{mount}, per cui ne
+tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
+\cite{libc} per la documentazione completa.
+
+
+\subsection{La gestione di utenti e gruppi}
+\label{sec:sys_user_group}
+
+L'ultimo argomento di questa sezione è quello che riguarda le funzioni
+utilizzate per gestire utenti e gruppi all'interno del sistema.
+Tradizionalmente l'informazione per la gestione di utenti e gruppi veniva
+tenuta tutta nei due file di testo \file{/etc/passwd} ed \file{/etc/group};
+oggi la maggior parte delle distribuzioni di Linux usa la libreria PAM (sigla
+che sta \textit{Pluggable Authentication Method}) che permette di separare
+completamente i meccanismi di gestione degli utenti (autenticazione,
+riconoscimeto, ecc.) dal
+
+
+
+Lo standard POSIX.1 definisce una serie di funzioni