X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=9f07508f66e22de651a6092ec88c39c42758c40d;hp=55d09eec1d56e3b8dd85c93cfb782d35ceab8751;hb=34a2be64c8f61965c3dae12809cba72f37a91ebb;hpb=c316b51fbaa9a5bb04e72b1e7e9b3eb7ab96fd62 diff --git a/system.tex b/system.tex index 55d09ee..9f07508 100644 --- a/system.tex +++ b/system.tex @@ -624,8 +624,9 @@ del kernel, nella directory \file{Documentation/sysctl}. Come accennato in \secref{sec:file_organization} per poter accedere ai file occorre prima rendere disponibile al sistema il filesystem su cui essi sono memorizzati; l'operazione di attivazione del filesystem è chiamata -\textsl{montaggio}, per far questo si usa la funzione \func{mount} il cui -prototipo è: +\textsl{montaggio}, per far questo in Linux\footnote{la funzione è specifica + di Linux e non è portabile} si usa la funzione \func{mount} il cui prototipo +è: \begin{prototype}{sys/mount.h} {mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data)} @@ -634,7 +635,8 @@ Monta il filesystem di tipo \param{filesystemtype} contenuto in \param{source} 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: + fallimento, nel qual caso gli errori comuni a tutti i filesystem che possono + essere restituiti in \var{errno} sono: \begin{errlist} \item[\macro{EPERM}] il processo non ha i provilegi di amministratore. \item[\macro{ENODEV}] \param{filesystemtype} non esiste o non è configurato @@ -661,11 +663,101 @@ sulla directory \param{target}. \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.} \end{prototype} +La funzione monta sulla directory \param{target}, detta \textit{mount point}, +il filesystem contenuto in \param{source}. Di norma questo è un file di +dispositivo che fa riferimento al disco (o al device a blocchi) che deve +essere montato, ma può anche essere un file normale che contiene un +filesystem, (che può essere montato \textit{in loopback}) o anche una +directory. Dal kernel 2.4.x infatti è divenuto possibile sia spostare +atomicamente un \textit{mount point} da una directory ad un'altra, che montare +in più punti lo stesso filesystem. + +Con \param{filesystemtype} si indica il tipo di filesystem (che +deve essere supportato dal kernel) indicato dalla stringa che lo identifica +(che per quelli supportati è mantenuta in \file{/proc/filesystems}). + +Il parametro \param{mountflags} serve invece per specificare le opzioni di +montaggio, esso è passato come intero a 32 bit i cui 16 più significativi +devono essere \code{0xC0ED} mentre i 16 meno significativi costituiscono una +maschera specificabile con un and binario dei valori riportati in \ntab. + +\begin{table}[htb] + \centering + \begin{tabular}[c]{|l|r|l|} + \hline + \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\ + \hline + \hline + \macro{MS\_RDONLY} & 1 & montain sola lettura\\ + \macro{MS\_NOSUID} & 2 & ignora i bit \acr{suig} e \acr{sgid}\\ + \macro{MS\_NODEV} & 4 & impedisce l'accesso ai file di dispositivo\\ + \macro{MS\_NOEXEC} & 8 & impedisce di eseguire programmi \\ + \macro{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\ + \macro{MS\_REMOUNT} & 32 & rimonta il filesystem cambiando i flag\\ + \macro{MS\_MANDLOCK} & 64 & consente il \textit{mandatory locking} (vedi + \secref{sec:file_mand_locking})\\ + \macro{MS\_NOATIME} &1024 & non aggiorna gli \textit{access time} (vedi + \secref{sec:file_file_times})\\ + \macro{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle + directory\\ + \macro{MS\_BIND} &4096 & monta il filesystem altrove\\ + \macro{MS\_MOVE} &8192 & sposta atomicamente il punto di montaggio \\ + \hline + \end{tabular} + \caption{Tabella dei codici dei flag di montaggio di un filesystem.} + \label{tab:sys_mount_flags} +\end{table} + +Infine l'aromento \param{data} serve per passare ulteriori informazioni che +possono essere necessarie ai vari filesystem e che variano da filesystem a +filesystem. + +Si tenga presente inoltre che, sempre a partire dal kernel 2.4.x, è possibile +sovrapporre più montaggi su una stessa directory, nel qual caso si vedrà +sempre l'ultimo filesystem che è stato montato. +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 provilegi 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 che è stato montato, in quanto con il kernel 2.4.x è +possibile montare lo stesso dispositivo in più punti; inoltre nel caso più di +un filesystem sia stato montato sullo stesso \textit{mount point} viene +smontato quello che è stato montato per ultimo. + +Due funzioni, 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{La funzione restituisce 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} -\subsection{La funzione \func{statfs}} -\label{sec:sys_file_stafs} \subsection{La gestione di utenti e gruppi}