\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
\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
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 */
\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}
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
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
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
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
\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
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.
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