\bodydesc{La funzione restituisce $0$ in caso di successo e $-1$ in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EBADF}].
\item[\errcode{EINVAL}] o \param{acl} non è una ACL valida, o \param{type}
ha in valore non corretto.
\item[\errcode{ENOSPC}] non c'è spazio disco sufficiente per contenere i
ha senso solo per i filesystem su cui si mantengono i dati degli
utenti\footnote{in genere la si attiva sul filesystem che contiene le
\textit{home} degli utenti, dato che non avrebbe senso per i file di sistema
- che appartengono all'amministratore} essa deve essere abilitata
+ che in genere appartengono all'amministratore.} essa deve essere abilitata
esplicitamente, questo si fa tramite due distinte opzioni di montaggio,
\texttt{usrquota} e \texttt{grpquota} che la attivano rispettivamente per gli
utenti e per i gruppi, cosa che consente di abilitare solo quelle che
-interessano veramente.
-
-Il meccanismo prevede che per ciascun filesystem che supporta le quote (i vari
-\textit{extN}, \textit{btrfs}, \textit{XFS}, \textit{JFS}, \textit{ReiserFS})
-il kernel provveda a mantenere i dati relativi al consumo delle risorse in due
-file riservati,\footnote{la cosa vale per tutti i fileystem tranne
- \textit{XFS} che mantiene i dati internamente; con la versione 2 del
- supporto delle quote, l'unica rimasta in uso, questi file sono
- \texttt{aquota.user} e \texttt{aquota.group} e si trovano nella directory
- radice del filesytem su cui si sono attivate le quote.} e a
+interessano veramente.
+
+Il meccanismo delle quote prevede che per ciascun filesystem che le supporta
+(i vari \textit{extN}, \textit{btrfs}, \textit{XFS}, \textit{JFS},
+\textit{ReiserFS}) il kernel provveda sia a mantenere aggiornati i dati
+relativi al consumo delle risorse da parte di utenti e/o gruppi che a far
+rispettare i limiti imposti dal sistema con la generazione di un errore di
+\errval{EDQUOT} per tutte le operazioni sui file che porterebbero ad un
+superamento degli stessi.
+
+Per il mantenimento dei dati di consumo delle risorse vengono usati due file
+riservati (uno per le quote utente e l'altro per le quote gruppo) nella
+directory radice del filesytem su cui si sono attivate le quote;\footnote{la
+ cosa vale per tutti i fileystem tranne \textit{XFS} che mantiene i dati
+ internamente.} con la versione 2 del supporto delle quote, l'unica rimasta
+in uso, questi file sono \texttt{aquota.user} e \texttt{aquota.group}, in
+precedenza erano \texttt{quota.user} e \texttt{quota.group}. Dato che i file
+vengono aggiornati soltanto se il filesystem è stato montato con il supporto
+delle quote, se si abilita questo in un secondo tempo (o se si eseguono
+operazioni sul filesystem senza averlo abilitato) i dati contenuti possono non
+corrispondere esattamente allo stato corrente del consumo delle risorse; per
+questo in genere prima di montare un filesystem su cui sono abilitate le quote
+viene utilizzato il comando \cmd{quotacheck} per verificare e aggiornare i
+dati.
+
+Le restrizioni sul consumo delle risorse prevedono due limiti, il primo viene
+detto \textit{soft limit} e può essere superato per brevi periodi di tempo, il
+secondo viene detto \textit{hard limit} non può mai essere superato. Il
+periodo di tempo per cui è possibile superare il \textit{soft limit} è detto
+``\textsl{periodo di grazia}'' (\textit{grace period}), passato questo tempo
+il passaggio del \textit{soft limit} viene trattato allo stesso modo
+dell'\textit{hard limit}. Questi limiti riguardano separatamente sia lo
+spazio disco (i blocchi) che il numero di file (gli \textit{inode}) e devono
+pertanto essere specificati per entrambe le risorse.
+
+La funzione che consente di controllare tutti i vari aspetti della gestione
+delle quote è \funcd{quotactl}, ed il suo prototipo è:
+\begin{functions}
+ \headdecl{sys/types.h}
+ \headdecl{sys/quota.h}
+
+ \funcdecl{quotactl(int cmd, const char *special, int id, caddr\_t addr)}
+
+ Esegue una operazione di controllo sulle quote disco.
+
+ \bodydesc{La funzione restituisce $0$ in caso di successo e $-1$ in caso di
+ errore, nel qual caso \var{errno} assumerà uno dei valori:
+ \begin{errlist}
+ \item[\errcode{EACCES}] il file delle quote non è un file normale.
+ \item[\errcode{EBUSY}] si è richiesto \const{Q\_QUOTAON} ma le quote sono
+ già attive.
+ \item[\errcode{EFAULT}] l'indirizzo \param{addr} non è valido.
+ \item[\errcode{EIO}] errore di lettura/scrittura sul file delle quote.
+ \item[\errcode{EMFILE}] non si può aprire il file delle quote avando
+ superato il limite sul numero di file aperti nel sistema.
+ \item[\errcode{EINVAL}] o \param{cmd} non è un comando valido,
+ o il dispositivo \param{special} non esiste.
+ \item[\errcode{ENODEV}] \param{special} non corrisponde ad un \textit{mount
+ point} attivo.
+ \item[\errcode{ENOPKG}] il kernel è stato compilato senza supporto per le
+ quote.
+ \item[\errcode{ENOTBLK}] \param{special} non è un dispositivo a blocchi.
+ \item[\errcode{EPERM}] il .
+ \item[\errcode{ESRCH}] è stato richiesto uno fra \const{Q\_GETQUOTA},
+ \const{Q\_SETQUOTA}, \const{Q\_SETUSE}, \const{Q\_SETQLIM} per un
+ filesystem senza quote attivate.
+ \end{errlist}
+}
+\end{functions}
+
+La funzione richiede che si indichi il filesystem sul quale si vuole operare
+tramite il secondo argomento \param{special} che deve indicare il nome del
+file di dispositivo ad esso associato, la funzione richiede che il filesystem
+sia montato con il supporto per le quote. Il terzo argomento \param{id}
+indica, per le operazioni che lo richiedono l'utente o il gruppo (specificati
+rispettivamente per \acr{uid} e \acr{gid}) su cui si vuole operare, infine
+l'ultimo argomento specifica l'indirizzo di una struttura dati che dipende di
+nuovo dal comando.
+
+
+Il funzionamento di \func{quotactl} è controllato dal valore del primo
+argomento, che indica l'operazione che si vuole eseguire e se la si vuole
+eseguire per le quote disco o le quote gruppo (posto che siano entrm
+
% TODO trattare quote disco