Si prosegue con la reindicizzazione delle funzioni, con relativa revizione
[gapil.git] / filedir.tex
index 2a634b9fa8ddb5e874ec9a3d5c6903b1be0772af..9b4025ec5606dcc71bfb89e66bd2d6addf3d4be0 100644 (file)
@@ -56,26 +56,24 @@ Come spiegato in \secref{sec:file_filesystem} l'accesso al contenuto di un
 file su disco avviene passando attraverso il suo inode\index{inode}, che è la
 struttura usata dal kernel che lo identifica univocamente all'interno di un
 singolo filesystem. Il nome del file che si trova nella voce di una directory
 file su disco avviene passando attraverso il suo inode\index{inode}, che è la
 struttura usata dal kernel che lo identifica univocamente all'interno di un
 singolo filesystem. Il nome del file che si trova nella voce di una directory
-è solo un'etichetta che viene associata ad un puntatore che fa riferimento al
-suddetto inode.  
+è solo un'etichetta, mantenuta all'interno della directory, che viene
+associata ad un puntatore che fa riferimento al suddetto inode.
 
 Questo significa che, fintanto che si resta sullo stesso filesystem, la
 realizzazione di un link è immediata, ed uno stesso file può avere tanti nomi
 
 Questo significa che, fintanto che si resta sullo stesso filesystem, la
 realizzazione di un link è immediata, ed uno stesso file può avere tanti nomi
-diversi allo stesso tempo, dati da altrettante diverse associazioni allo
-stesso inode\index{inode}. Si noti anche che nessuno di questi nomi viene ad
-assumere una particolare preferenza o originalità rispetto agli altri.
+diversi, dati da altrettante diverse associazioni allo stesso
+inode\index{inode} di etichette diverse in directory diverse. Si noti anche
+che nessuno di questi nomi viene ad assumere una particolare preferenza o
+originalità rispetto agli altri, in quanto tutti fanno comunque riferimento
+allo stesso inode\index{inode}.
 
 Per aggiungere ad una directory una voce che faccia riferimento ad un
 inode\index{inode} già esistente si utilizza la funzione \func{link}; si suole
 chiamare questo tipo di associazione un collegamento diretto (o \textit{hard
 
 Per aggiungere ad una directory una voce che faccia riferimento ad un
 inode\index{inode} già esistente si utilizza la funzione \func{link}; si suole
 chiamare questo tipo di associazione un collegamento diretto (o \textit{hard
-  link}).  
-
-Il prototipo della funzione e le sue caratteristiche principali,
-come risultano dalla pagina di manuale, sono le seguenti:
+  link}).  Il prototipo della funzione è:
 \begin{prototype}{unistd.h}
 {int link(const char *oldpath, const char *newpath)}
 \begin{prototype}{unistd.h}
 {int link(const char *oldpath, const char *newpath)}
-  Crea un nuovo collegamento diretto al file indicato da \param{oldpath}
-  dandogli nome \param{newpath}.
+  Crea un nuovo collegamento diretto.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore nel qual caso \var{errno} viene impostata ai valori:
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore nel qual caso \var{errno} viene impostata ai valori:
@@ -95,12 +93,14 @@ come risultano dalla pagina di manuale, sono le seguenti:
   \errval{ENOSPC}, \errval{EIO}.}
 \end{prototype}
 
   \errval{ENOSPC}, \errval{EIO}.}
 \end{prototype}
 
-La creazione di un nuovo collegamento diretto non copia il contenuto del file,
-ma si limita a creare una voce nella directory specificata con \param{newpath}
-e ad aumentare di uno il numero di riferimenti al file (riportato nel campo
-\var{st\_nlink} della struttura \struct{stat}, vedi \secref{sec:file_stat})
-aggiungendo il nuovo nome ai precedenti. Si noti che uno stesso file può
-essere così chiamato con vari nomi in diverse directory.
+La funzione crea sul pathname \param{newpath} un collegamento diretto al file
+indicato da \param{oldpath}.  Per quanto detto la creazione di un nuovo
+collegamento diretto non copia il contenuto del file, ma si limita a creare
+una voce nella directory specificata da \param{newpath} e ad aumentare di uno
+il numero di riferimenti al file (riportato nel campo \var{st\_nlink} della
+struttura \struct{stat}, vedi \secref{sec:file_stat}) aggiungendo il nuovo
+nome ai precedenti. Si noti che uno stesso file può essere così chiamato con
+vari nomi in diverse directory.
  
 Per quanto dicevamo in \secref{sec:file_filesystem} la creazione di un
 collegamento diretto è possibile solo se entrambi i pathname sono nello stesso
  
 Per quanto dicevamo in \secref{sec:file_filesystem} la creazione di un
 collegamento diretto è possibile solo se entrambi i pathname sono nello stesso
@@ -125,7 +125,7 @@ disabilitata, e al tentativo di creare un link diretto ad una directory la
 funzione restituisce l'errore \errcode{EPERM}.
 
 La rimozione di un file (o più precisamente della voce che lo referenzia
 funzione restituisce l'errore \errcode{EPERM}.
 
 La rimozione di un file (o più precisamente della voce che lo referenzia
-all'interno di una directory) si effettua con la funzione \func{unlink}; il
+all'interno di una directory) si effettua con la funzione \funcd{unlink}; il
 suo prototipo è il seguente:
 \begin{prototype}{unistd.h}{int unlink(const char *pathname)}
 
 suo prototipo è il seguente:
 \begin{prototype}{unistd.h}{int unlink(const char *pathname)}
 
@@ -152,12 +152,12 @@ suo prototipo 
   \errcode{EPERM} in caso l'operazione non sia consentita o il processo non
   abbia privilegi sufficienti.}
 
   \errcode{EPERM} in caso l'operazione non sia consentita o il processo non
   abbia privilegi sufficienti.}
 
-La funzione cancella il nome specificato dal pathname nella relativa directory
-e decrementa il numero di riferimenti nel relativo inode\index{inode}. Nel
-caso di link simbolico cancella il link simbolico; nel caso di
-socket\index{socket}, fifo o file di dispositivo\index{file!di dispositivo}
-rimuove il nome, ma come per i file i processi che hanno aperto uno di questi
-oggetti possono continuare ad utilizzarlo.
+La funzione cancella il nome specificato da \param{pathname} nella relativa
+directory e decrementa il numero di riferimenti nel relativo
+inode\index{inode}. Nel caso di link simbolico cancella il link simbolico; nel
+caso di socket\index{socket}, fifo o file di dispositivo\index{file!di
+  dispositivo} rimuove il nome, ma come per i file i processi che hanno aperto
+uno di questi oggetti possono continuare ad utilizzarlo.
 
 Per cancellare una voce in una directory è necessario avere il permesso di
 scrittura su di essa, dato che si va a rimuovere una voce dal suo contenuto, e
 
 Per cancellare una voce in una directory è necessario avere il permesso di
 scrittura su di essa, dato che si va a rimuovere una voce dal suo contenuto, e
@@ -204,7 +204,7 @@ processo (quando tutti i file vengono chiusi).
 Al contrario di quanto avviene con altri Unix, in Linux non è possibile usare
 \func{unlink} sulle directory; per cancellare una directory si può usare la
 funzione \func{rmdir} (vedi \secref{sec:file_dir_creat_rem}), oppure la
 Al contrario di quanto avviene con altri Unix, in Linux non è possibile usare
 \func{unlink} sulle directory; per cancellare una directory si può usare la
 funzione \func{rmdir} (vedi \secref{sec:file_dir_creat_rem}), oppure la
-funzione \func{remove}. 
+funzione \funcd{remove}. 
 
 Questa è la funzione prevista dallo standard ANSI C per cancellare un file o
 una directory (e funziona anche per i sistemi che non supportano i link
 
 Questa è la funzione prevista dallo standard ANSI C per cancellare un file o
 una directory (e funziona anche per i sistemi che non supportano i link
@@ -230,7 +230,7 @@ protocollo NFS utilizzare questa funzione pu
 ancora in uso.
 
 Per cambiare nome ad un file o a una directory (che devono comunque essere
 ancora in uso.
 
 Per cambiare nome ad un file o a una directory (che devono comunque essere
-nello stesso filesystem) si usa invece la funzione \func{rename},\footnote{la
+nello stesso filesystem) si usa invece la funzione \funcd{rename},\footnote{la
   funzione è definita dallo standard ANSI C, ma si applica solo per i file, lo
   standard POSIX estende la funzione anche alle directory.} il cui prototipo
 è:
   funzione è definita dallo standard ANSI C, ma si applica solo per i file, lo
   standard POSIX estende la funzione anche alle directory.} il cui prototipo
 è:
@@ -324,7 +324,7 @@ al kernel (analogamente a quanto avviene per le directory) per cui per alcune
 funzioni di libreria (come \func{open} o \func{stat}) dare come parametro un
 link simbolico comporta l'applicazione della funzione al file da esso
 specificato. La funzione che permette di creare un nuovo link simbolico è
 funzioni di libreria (come \func{open} o \func{stat}) dare come parametro un
 link simbolico comporta l'applicazione della funzione al file da esso
 specificato. La funzione che permette di creare un nuovo link simbolico è
-\func{symlink}; il suo prototipo è:
+\funcd{symlink}; il suo prototipo è:
 \begin{prototype}{unistd.h}
   {int symlink(const char *oldpath, const char *newpath)} 
   Crea un nuovo link simbolico di nome \param{newpath} il cui contenuto è
 \begin{prototype}{unistd.h}
   {int symlink(const char *oldpath, const char *newpath)} 
   Crea un nuovo link simbolico di nome \param{newpath} il cui contenuto è
@@ -403,7 +403,7 @@ Dato che, come indicato in \tabref{tab:file_symb_effect}, funzioni come la
 \func{open} seguono i link simbolici, occorrono funzioni apposite per accedere
 alle informazioni del link invece che a quelle del file a cui esso fa
 riferimento. Quando si vuole leggere il contenuto di un link simbolico si usa
 \func{open} seguono i link simbolici, occorrono funzioni apposite per accedere
 alle informazioni del link invece che a quelle del file a cui esso fa
 riferimento. Quando si vuole leggere il contenuto di un link simbolico si usa
-la funzione \func{readlink}, il cui prototipo è:
+la funzione \funcd{readlink}, il cui prototipo è:
 \begin{prototype}{unistd.h}
 {int readlink(const char *path, char *buff, size\_t size)} 
   Legge il contenuto del link simbolico indicato da \param{path} nel buffer
 \begin{prototype}{unistd.h}
 {int readlink(const char *path, char *buff, size\_t size)} 
   Legge il contenuto del link simbolico indicato da \param{path} nel buffer
@@ -479,12 +479,18 @@ ci mostrerebbe invece l'esistenza di \file{temporaneo}.
 \subsection{La creazione e la cancellazione delle directory} 
 \label{sec:file_dir_creat_rem}
 
 \subsection{La creazione e la cancellazione delle directory} 
 \label{sec:file_dir_creat_rem}
 
-Per creare e cancellare delle directory si usano le due funzioni (omonime
-degli analoghi comandi di shell) \func{mkdir} e \func{rmdir}.  Per poter
-accedere ai tipi usati da queste funzioni si deve includere il file
-\file{sys/types.h}, il prototipo della prima è:
-\begin{prototype}{sys/stat.h}
-  {int mkdir(const char *dirname, mode\_t mode)} Crea una nuova directory.
+Benché in sostanza le directory non siano altro che dei file contenenti
+elenchi di nomi ed inode, non è possibile trattarle come file ordinari e
+devono essere create direttamente dal kernel attraverso una opportuna system
+call.\footnote{questo permette anche, attraverso l'uso del VFS, l'utilizzo di
+  diversi formati per la gestione dei suddetti elenchi.}  La funzione usata
+per creare una directory è \funcd{mkdir}, ed il suo prototipo è:
+\begin{functions}
+  \headdecl{sys/stat.h}
+  \headdecl{sys/types.h}
+  \funcdecl{int mkdir(const char *dirname, mode\_t mode)} 
+
+  Crea una nuova directory.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
@@ -506,7 +512,7 @@ accedere ai tipi usati da queste funzioni si deve includere il file
   ed inoltre anche \errval{EPERM}, \errval{EFAULT}, \errval{ENAMETOOLONG},
   \errval{ENOENT}, \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP},
   \errval{EROFS}.}
   ed inoltre anche \errval{EPERM}, \errval{EFAULT}, \errval{ENAMETOOLONG},
   \errval{ENOENT}, \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP},
   \errval{EROFS}.}
-\end{prototype}
+\end{functions}
 
 La funzione crea una nuova directory vuota, che contiene cioè solo le due voci
 standard \file{.} e \file{..}, con il nome indicato dall'argomento
 
 La funzione crea una nuova directory vuota, che contiene cioè solo le due voci
 standard \file{.} e \file{..}, con il nome indicato dall'argomento
@@ -520,9 +526,8 @@ creazione dei file (si veda \secref{sec:file_umask}).  La titolarit
 nuova directory è impostata secondo quanto riportato in
 \secref{sec:file_ownership}.
 
 nuova directory è impostata secondo quanto riportato in
 \secref{sec:file_ownership}.
 
-La seconda funzione serve ad eliminare una directory già vuota (la directory
-deve cioè contenere soltanto le due voci standard \file{.} e \file{..}); il
-suo prototipo è:
+La funzione per la cancellazione di una directory è \funcd{rmdir}, il suo
+prototipo è:
 \begin{prototype}{sys/stat.h}{int rmdir(const char *dirname)} 
   Cancella una directory.
 
 \begin{prototype}{sys/stat.h}{int rmdir(const char *dirname)} 
   Cancella una directory.
 
@@ -545,8 +550,9 @@ suo prototipo 
   \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.}
 \end{prototype}
 
   \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.}
 \end{prototype}
 
-La funzione cancella la directory \param{dirname}, che deve essere vuota.  Il
-nome può essere indicato con il pathname assoluto o relativo.
+La funzione cancella la directory \param{dirname}, che deve essere vuota (la
+directory deve cioè contenere soltanto le due voci standard \file{.} e
+\file{..}).  Il nome può essere indicato con il pathname assoluto o relativo.
 
 La modalità con cui avviene la cancellazione è analoga a quella di
 \func{unlink}: fintanto che il numero di link all'inode\index{inode} della
 
 La modalità con cui avviene la cancellazione è analoga a quella di
 \func{unlink}: fintanto che il numero di link all'inode\index{inode} della