Iniziato esempio Mutex
[gapil.git] / filedir.tex
index c1bb182b55d93865bc3f79cbd79ec761be294b10..cc4b004d72f53b73dd92bdabe46d9ceeba3f0700 100644 (file)
@@ -283,7 +283,7 @@ specificato. La funzione che permette di creare un nuovo link simbolico 
   \param{oldpath}.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, nel qual caso la variabile \var{errno} restituisce i valori:
+    errore, nel qual caso la variabile \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\macro{EPERM}] il filesystem che contiene \param{newpath} non supporta
     i link simbolici.
@@ -305,10 +305,11 @@ che non esiste: in questo caso si ha quello che viene chiamato un
 \textit{dangling link}, letteralmente un \textsl{link ciondolante}.
 
 Come accennato i link simbolici sono risolti automaticamente dal kernel
-all'invocazione delle varie system call; in \ntab\ si è riportato un elenco
-dei comportamenti delle varie funzioni di libreria che operano sui file nei
-confronti della risoluzione dei link simbolici, specificando quali seguono il
-link simbolico e quali invece possono operare direttamente sul suo contenuto.
+all'invocazione delle varie system call; in \tabref{tab:file_symb_effect} si è
+riportato un elenco dei comportamenti delle varie funzioni di libreria che
+operano sui file nei confronti della risoluzione dei link simbolici,
+specificando quali seguono il link simbolico e quali invece possono operare
+direttamente sul suo contenuto.
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -362,7 +363,7 @@ la funzione \func{readlink}, il cui prototipo 
   
   \bodydesc{La funzione restituisce il numero di caratteri letti dentro
     \var{buff} o -1 per un errore, nel qual caso la variabile
-    \var{errno} viene impostata a:
+    \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\macro{EINVAL}] \param{path} non è un link simbolico o \param{size}
     non è positiva.
@@ -380,21 +381,21 @@ stringa con un carattere nullo e la tronca alla dimensione specificata da
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=7cm]{img/link_loop}
+  \includegraphics[width=9cm]{img/link_loop}
   \caption{Esempio di loop nel filesystem creato con un link simbolico.}
   \label{fig:file_link_loop}
 \end{figure}
 
 Un caso comune che si può avere con i link simbolici è la creazione dei
-cosiddetti \textit{loop}. La situazione è illustrata in \curfig, che riporta
-la struttura della directory \file{/boot}. Come si vede si è creato al suo
-interno un link simbolico che punta di nuovo a \file{/boot}.\footnote{Questo
-  tipo di loop è stato effettuato per poter permettere a \cmd{grub} (un
-  bootloader in grado di leggere direttamente da vari filesystem il file da
-  lanciare come sistema operativo) di vedere i file in questa directory con lo
-  stesso path con cui verrebbero visti dal sistema operativo, anche se essi si
-  trovano, come è solito, su una partizione separata (e che \cmd{grub}
-  vedrebbe come radice).}
+cosiddetti \textit{loop}. La situazione è illustrata in
+\figref{fig:file_link_loop}, che riporta la struttura della directory
+\file{/boot}. Come si vede si è creato al suo interno un link simbolico che
+punta di nuovo a \file{/boot}.\footnote{Questo tipo di loop è stato effettuato
+  per poter permettere a \cmd{grub} (un bootloader in grado di leggere
+  direttamente da vari filesystem il file da lanciare come sistema operativo)
+  di vedere i file in questa directory con lo stesso path con cui verrebbero
+  visti dal sistema operativo, anche se essi si trovano, come è solito, su una
+  partizione separata (e che \cmd{grub} vedrebbe come radice).}
 
 Questo può causare problemi per tutti quei programmi che effettuano la
 scansione di una directory senza tener conto dei link simbolici, ad esempio se
@@ -676,7 +677,7 @@ appunto per \textit{change directory}, il suo prototipo 
   Cambia la directory di lavoro corrente in \param{pathname}.
   
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 per un errore,
-    nel qual caso \var{errno} viene impostata a:
+    nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\macro{ENOTDIR}] Non si è specificata una directory.
   \item[\macro{EACCESS}] Manca il permesso di ricerca su uno dei componenti di
@@ -696,8 +697,8 @@ usa \func{fchdir}, il cui prototipo 
   pathname.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, in caso di errore \var{errno} viene impostata ai valori
-    \macro{EBADF} o \macro{EACCES}.}
+    errore, in caso di errore \var{errno} assumerà i valori \macro{EBADF} o
+    \macro{EACCES}.}
 \end{prototype}
 \noindent anche in questo caso \param{fd} deve essere un file descriptor
 valido che fa riferimento ad una directory. Inoltre l'unico errore di accesso
@@ -780,7 +781,7 @@ POSIX definisce la funzione \func{tempfile}, il cui prototipo 
   
   \bodydesc{La funzione ritorna il puntatore allo stream associato al file
     temporaneo in caso di successo e \macro{NULL} in caso di errore, nel qual
-    caso \var{errno} viene impostata a
+    caso \var{errno} assumerà i valori:
     \begin{errlist}
     \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
     \item[\macro{EEXIST}] Non è stato possibile generare un nome univoco.
@@ -807,8 +808,8 @@ il suo prototipo 
   \param{template}.
   
   \bodydesc{La funzione ritorna il puntatore \param{template} in caso di
-    successo e \macro{NULL} in caso di errore, nel qual caso \var{errno} viene
-    impostata a:
+    successo e \macro{NULL} in caso di errore, nel qual caso \var{errno}
+    assumerà i valori:
     \begin{errlist}
     \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}.
     \end{errlist}}
@@ -833,7 +834,7 @@ prototipo 
   finali di \param{template}.
   
   \bodydesc{La funzione ritorna il file descriptor in caso successo e
-    -1 in caso di errore, nel qual caso \var{errno} viene impostata a:
+    -1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
     \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}.
     \item[\macro{EEXIST}] non è riuscita a creare un file temporano, il
@@ -858,8 +859,8 @@ In OpenBSD 
   \code{XXXXXX} finali di \param{template}.
   
   \bodydesc{La funzione ritorna il puntatore al nome della directory in caso
-    successo e \macro{NULL} in caso di errore, nel qual caso \var{errno} viene
-    impostata a:
+    successo e \macro{NULL} in caso di errore, nel qual caso \var{errno}
+    assumerà i valori:
     \begin{errlist}
     \item[\macro{EINVAL}] \param{template} non termina con \code{XXXXXX}.
     \end{errlist}
@@ -909,27 +910,26 @@ queste funzioni sono i seguenti:
   eccetto che si usa con un file aperto, specificato tramite il suo file
   descriptor \var{filedes}.
   
-  \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
-    un errore, in caso di errore \var{errno} può assumere uno dei
-    valori: \macro{EBADF}, \macro{ENOENT}, \macro{ENOTDIR},
-    \macro{ELOOP}, \macro{EFAULT}, \macro{EACCESS}, \macro{ENOMEM},
-    \macro{ENAMETOOLONG}.}
+  \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 per un
+    errore, nel qual caso \var{errno} assumerà uno dei valori: \macro{EBADF},
+    \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP}, \macro{EFAULT},
+    \macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.}
 \end{functions}
 \noindent il loro comportamento è identico, solo che operano rispettivamente
 su un file, su un link simbolico e su un file descriptor.
 
 La struttura \var{stat} usata da queste funzioni è definita nell'header
 \file{sys/stat.h} e in generale dipende dall'implementazione, la versione
-usata da Linux è mostrata in \nfig, così come riportata dalla pagina di
-manuale di \func{stat} (in realtà la definizione effettivamente usata nel
-kernel dipende dall'architettura e ha altri campi riservati per estensioni
-come tempi più precisi, o per il padding dei campi).
+usata da Linux è mostrata in \figref{fig:file_stat_struct}, così come
+riportata dalla pagina di manuale di \func{stat} (in realtà la definizione
+effettivamente usata nel kernel dipende dall'architettura e ha altri campi
+riservati per estensioni come tempi più precisi, o per il padding dei campi).
 
 \begin{figure}[!htb]
   \footnotesize
   \centering
   \begin{minipage}[c]{15cm}
-    \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
+    \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct stat {
     dev_t         st_dev;      /* device */
     ino_t         st_ino;      /* inode */
@@ -953,9 +953,9 @@ struct stat {
   \label{fig:file_stat_struct}
 \end{figure}
 
-Si noti come i vari membri della struttura siano specificati come tipi nativi
-del sistema (di quelli definiti in \tabref{tab:xxx_sys_types}, e dichiarati in
-\file{sys/types.h}). 
+Si noti come i vari membri della struttura siano specificati come tipi
+primitivi del sistema (di quelli definiti in
+\tabref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}).
 
 
 \subsection{I tipi di file}
@@ -971,7 +971,7 @@ standard POSIX definisce un insieme di macro per verificare il tipo di files,
 queste vengono usate anche da Linux che supporta pure le estensioni allo
 standard per i link simbolici e i socket definite da BSD; l'elenco completo
 delle macro con cui è possibile estrarre l'informazione da \var{st\_mode} è
-riportato in \ntab.
+riportato in \tabref{tab:file_type_macro}.
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -996,9 +996,10 @@ riportato in \ntab.
 Oltre alle macro di \tabref{tab:file_type_macro} è possibile usare
 direttamente il valore di \var{st\_mode} per ricavare il tipo di file
 controllando direttamente i vari bit in esso memorizzati. Per questo sempre in
-\file{sys/stat.h} sono definite le costanti numeriche riportate in \ntab.
+\file{sys/stat.h} sono definite le costanti numeriche riportate in
+\tabref{tab:file_mode_flags}.
 
-Il primo valore dell'elenco di \secref{tab:file_mode_flags} è la maschera
+Il primo valore dell'elenco di \tabref{tab:file_mode_flags} è la maschera
 binaria che permette di estrarre i bit nei quali viene memorizzato il tipo di
 file, i valori successivi sono le costanti corrispondenti ai singoli bit, e
 possono essere usati per effettuare la selezione sul tipo di file voluto, con
@@ -1133,8 +1134,9 @@ Il sistema mantiene per ciascun file tre tempi. Questi sono registrati
 nell'inode insieme agli altri attributi del file e possono essere letti
 tramite la funzione \func{stat}, che li restituisce attraverso tre campi della
 struttura \var{stat} di \figref{fig:file_stat_struct}. Il significato di detti
-tempi e dei relativi campi è riportato nello schema in \ntab, dove si è anche
-riportato un esempio delle funzioni che effettuano cambiamenti su di essi.
+tempi e dei relativi campi è riportato nello schema in
+\tabref{tab:file_file_times}, dove si è anche riportato un esempio delle
+funzioni che effettuano cambiamenti su di essi.
 
 \begin{table}[htb]
   \centering
@@ -1177,14 +1179,14 @@ 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 \curtab.
+nell'ultima colonna di \tabref{tab:file_file_times}.
 
 L'effetto delle varie funzioni di manipolazione dei file sui tempi è
-illustrato in \ntab. Si sono riportati gli effetti sia per il file a cui si fa
-riferimento, sia per la directory che lo contiene; questi ultimi possono
-essere capiti se si tiene conto di quanto già detto, e cioè che anche le
-directory sono file (che contengono una lista di nomi) che il sistema tratta
-in maniera del tutto analoga a tutti gli altri.
+illustrato in \tabref{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;
+questi ultimi possono essere capiti se si tiene conto di quanto già detto, e
+cioè che anche le directory sono file (che contengono una lista di nomi) che
+il sistema tratta in maniera del tutto analoga a tutti gli altri.
 
 Per questo motivo tutte le volte che compiremo un'operazione su un file che
 comporta una modifica del nome contenuto nella directory, andremo anche a
@@ -1285,21 +1287,33 @@ Cambia i tempi di ultimo accesso e modifica dell'inode specificato da
 \param{filename} secondo i campi \var{actime} e \var{modtime} di
 \param{times}. Se questa è \macro{NULL} allora viene usato il tempo corrente.
 
-\bodydesc{La funzione restituisce zero in caso di successo e -1 in caso
-  di errore, nel qual caso \var{errno} è impostata opportunamente.
-\begin{errlist}
-\item[\macro{EACCESS}] non si ha il permesso di scrittura sul file.
-\item[\macro{ENOENT}] \param{filename} non esiste.
-\end{errlist}}
+\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[\macro{EACCESS}] non si ha il permesso di scrittura sul file.
+  \item[\macro{ENOENT}] \param{filename} non esiste.
+  \end{errlist}}
 \end{prototype}
  
-La struttura \var{utimebuf} usata da \func{utime} è definita come:
-\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
+La funzione prende come argomento \param{times} una struttura \var{utimebuf},
+la cui definizione è riportata in \figref{fig:struct_utimebuf}, con la quale
+si possono specificare i nuovi valori che si vogliono impostare per tempi.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15cm}
+    \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct utimbuf {
         time_t actime;  /* access time */
         time_t modtime; /* modification time */
 };
-\end{lstlisting}
+    \end{lstlisting}
+  \end{minipage} 
+  \normalsize 
+  \caption{La struttura \type{utimbuf}, usata da \func{utime} per modificare i
+    tempi dei file.} 
+  \label{fig:struct_utimebuf}
+\end{figure}
 
 L'effetto della funzione e i privilegi necessari per eseguirla dipendono da
 cosa è l'argomento \param{times}; se è \macro{NULL} la funzione imposta il
@@ -1312,9 +1326,9 @@ cambiamento di stato del file, che viene comunque cambiato dal kernel tutte le
 volte che si modifica l'inode (quindi anche alla chiamata di \func{utime}).
 Questo serve anche come misura di sicurezza per evitare che si possa
 modificare un file nascondendo completamente le proprie tracce.  In realtà la
-cosa resta possibile, se si è in grado di accedere al device, scrivendo
-direttamente sul disco senza passare attraverso il filesystem, ma ovviamente
-in questo modo la cosa è molto più complicata da realizzare.
+cosa resta possibile, se si è in grado di accedere al file di dispositivo,
+scrivendo direttamente sul disco senza passare attraverso il filesystem, ma
+ovviamente in questo modo la cosa è molto più complicata da realizzare.
 
 
 
@@ -1390,7 +1404,7 @@ distinzione dato che in certi casi, mutuando la terminologia in uso nel VMS,
 si parla dei permessi base come di permessi per \textit{owner}, \textit{group}
 ed \textit{all}, le cui iniziali possono dar luogo a confusione.  Le costanti
 che permettono di accedere al valore numerico di questi bit nel campo
-\var{st\_mode} sono riportate in \ntab.
+\var{st\_mode} sono riportate in \tabref{tab:file_bit_perm}.
 
 \begin{table}[htb]
   \centering
@@ -1676,14 +1690,21 @@ questo si pu
 \begin{prototype}{unistd.h}
 {int access(const char *pathname, int mode)}
 
-Verifica i permessi di accesso, indicati da \var{mode}, per il file indicato
-da \var{pathname}.
+Verifica i permessi di accesso, indicati da \param{mode}, per il file indicato
+da \param{pathname}.
   
-\bodydesc{La funzione ritorna 0 se l'accesso è consentito, -1 altrimenti; in
-  quest'ultimo caso la variabile \var{errno} viene impostata secondo i codici
-  di errore: \macro{EACCES}, \macro{EROFS}, \macro{EFAULT}, \macro{EINVAL},
-  \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP},
-  \macro{EIO}.}
+\bodydesc{La funzione ritorna 0 se l'accesso è consentito, -1 se l'accesso non
+  è consentito ed in caso di errore; nel qual caso la variabile \var{errno}
+  assumerà i valori:
+  \begin{errlist}
+  \item[\macro{EINVAL}] il valore di \param{mode} non è valido.
+  \item[\macro{EACCES}] l'accesso al file non è consentito, o non si ha il
+    permesso di attraversare una delle directory di \param{pathname}.
+  \item[\macro{EROFS}] si è richiesto l'accesso in scrittura per un file su un
+    filesystem montato in sola lettura.
+  \end{errlist}
+  ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT},
+  \macro{ENOTDIR}, \macro{ELOOP}, \macro{EIO}.}
 \end{prototype}
 
 I valori possibili per l'argomento \param{mode} sono esprimibili come
@@ -1882,7 +1903,7 @@ sono tre e i loro prototipi sono i seguenti:
   specificati dalle variabili \var{owner} e \var{group}. 
   
   \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
-    un errore, in caso di errore \var{errno} viene impostata ai valori:
+    un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
   \item[\macro{EPERM}] L'userid effettivo non corrisponde a quello del
     proprietario del file o non è zero, o utente e gruppo non sono validi
@@ -1947,7 +1968,7 @@ radice con la funzione \func{chroot}, il cui prototipo 
   \param{path}.
   
 \bodydesc{La funzione restituisce zero in caso di successo e -1 per
-    un errore, in caso di errore \var{errno} viene impostata ai valori:
+    un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
   \item[\macro{EPERM}] L'userid effettivo del processo non è zero.
   \end{errlist}