e \param{data} vengono ignorati.
In sostanza quello che avviene è che in corrispondenza del \textit{pathname}
- indicato da \param{target} viene montato \itindex{inode} l'\textit{inode}
- di \param{source}, così che la porzione di albero dei file presente sotto
+ indicato da \param{target} viene montato l'\textit{inode} di \param{source},
+ così che la porzione di albero dei file presente sotto
\param{source} diventi visibile allo stesso modo sotto
\param{target}. Trattandosi esattamente dei dati dello stesso filesystem,
ogni modifica fatta in uno qualunque dei due rami di albero sarà visibile
Dal punto di vista del VFS l'operazione è analoga al montaggio di un
filesystem proprio nel fatto che anche in questo caso si inserisce in
corrispondenza della \textit{dentry} di \texttt{target} un diverso
- \itindex{inode} \textit{inode}, che stavolta, invece di essere quello della
- radice del filesystem indicato da un file di dispositivo, è quello di una
- directory già montata.
+ \textit{inode}, che stavolta, invece di essere quello della radice del
+ filesystem indicato da un file di dispositivo, è quello di una directory già
+ montata.
Si tenga presente che proprio per questo sotto \param{target} comparirà il
contenuto che è presente sotto \param{source} all'interno del filesystem in
di dispositivo eventualmente presenti su di esso. L'opzione viene usata come
misura di precauzione per rendere inutile la presenza di eventuali file di
dispositivo su filesystem che non dovrebbero contenerne.\footnote{si ricordi
- che le convenzioni del \itindex{Filesystem~Hierarchy~Standard~(FHS)}
- \textit{Linux Filesystem Hierarchy Standard} richiedono che questi siano
- mantenuti esclusivamente sotto \texttt{/dev}.}
+ che le convenzioni del \textit{Linux Filesystem Hierarchy Standard}
+ richiedono che questi siano mantenuti esclusivamente sotto \texttt{/dev}.}
Viene utilizzata, assieme a \const{MS\_NOEXEC} e \const{MS\_NOSUID}, per
fornire un accesso più controllato a quei filesystem di cui gli utenti hanno
% TODO (bassa priorità) documentare ? swapon e swapoff (man 2 ...)
+
\section{La gestione di file e directory}
\label{sec:file_dir}
temporanei.
-
\subsection{La gestione dei nomi dei file}
\label{sec:link_symlink_rename}
La funzione apre un \textit{directory stream} per la directory
\param{dirname}, ritornando il puntatore ad un oggetto di tipo \type{DIR} (che
-è il \index{tipo!opaco} tipo opaco usato dalle librerie per gestire i
-\textit{directory stream}) da usare per tutte le operazioni successive, la
-funzione inoltre posiziona lo \textit{stream} sulla prima voce contenuta nella
-directory.
+è il tipo opaco usato dalle librerie per gestire i \textit{directory stream})
+da usare per tutte le operazioni successive, la funzione inoltre posiziona lo
+\textit{stream} sulla prima voce contenuta nella directory.
Si tenga presente che comunque la funzione opera associando il
\textit{directory stream} ad un opportuno file descriptor sottostante, sul
stream} \param{dir}. Di solito si utilizza questa funzione in abbinamento a
funzioni che operano sui file descriptor, ad esempio si potrà usare
\func{fstat} per ottenere le proprietà della directory, o \func{fchdir} per
-spostare su di essa la directory di lavoro (vedi
-sez.~\ref{sec:file_work_dir}).
+spostare su di essa la directory di lavoro (vedi sez.~\ref{sec:file_work_dir}).
Viceversa se si è aperto un file descriptor corrispondente ad una directory è
possibile associarvi un \textit{directory stream} con la funzione
\func{readdir}.}
\end{funcproto}
-La funzione restituisce in \param{result} come \itindex{value~result~argument}
-\textit{value result argument} l'indirizzo della struttura \struct{dirent}
-dove sono stati salvati i dati, che deve essere allocata dal chiamante, ed il
-cui indirizzo deve essere indicato con l'argomento \param{entry}. Se si è
-raggiunta la fine del \textit{directory stream} invece in \param{result} viene
-restituito il valore \val{NULL}.
+La funzione restituisce in \param{result} come \textit{value result argument}
+l'indirizzo della struttura \struct{dirent} dove sono stati salvati i dati,
+che deve essere allocata dal chiamante, ed il cui indirizzo deve essere
+indicato con l'argomento \param{entry}. Se si è raggiunta la fine del
+\textit{directory stream} invece in \param{result} viene restituito il valore
+\val{NULL}.
\begin{figure}[!htb]
\footnotesize \centering
alla fine l'indirizzo della lista ordinata dei puntatori alle strutture
\struct{dirent} viene restituito nell'argomento
\param{namelist}.\footnote{la funzione alloca automaticamente la lista, e
- restituisce, come \itindex{value~result~argument} \textit{value result
- argument}, l'indirizzo della stessa; questo significa che \param{namelist}
- deve essere dichiarato come \code{struct dirent **namelist} ed alla funzione
- si deve passare il suo indirizzo.}
+ restituisce, come \textit{value result argument}, l'indirizzo della stessa;
+ questo significa che \param{namelist} deve essere dichiarato come
+ \code{struct dirent **namelist} ed alla funzione si deve passare il suo
+ indirizzo.}
\itindend{directory~stream}
\type{dev\_t}, con delle dimensioni passate a 12 bit per il
\itindex{major~number} \textit{major number} e 20 bit per il
\itindex{minor~number} \textit{minor number}. La transizione però ha
-comportato il fatto che \type{dev\_t} è diventato un \index{tipo!opaco} tipo
-opaco, e la necessità di specificare il numero tramite delle opportune macro,
-così da non avere problemi di compatibilità con eventuali ulteriori
-estensioni.
+comportato il fatto che \type{dev\_t} è diventato un tipo opaco, e la
+necessità di specificare il numero tramite delle opportune macro, così da non
+avere problemi di compatibilità con eventuali ulteriori estensioni.
Le macro sono definite nel file \headfile{sys/sysmacros.h},\footnote{se si usa
la \acr{glibc} dalla versione 2.3.3 queste macro sono degli alias alle
ottenere la massima velocità possibile per i programmi usati più comunemente
si poteva impostare questo bit.
-L'effetto di questo bit era che il \index{segmento!testo} segmento di testo
-del programma (si veda sez.~\ref{sec:proc_mem_layout} per i dettagli) veniva
-scritto nella swap la prima volta che questo veniva lanciato, e vi permaneva
-fino al riavvio della macchina (da questo il nome di \textsl{sticky bit});
-essendo la swap un file continuo o una partizione indicizzata direttamente si
-poteva risparmiare in tempo di caricamento rispetto alla ricerca attraverso la
-struttura del filesystem. Lo \textsl{sticky bit} è indicato usando la lettera
-``\texttt{t}'' al posto della ``\texttt{x}'' nei permessi per gli altri.
+L'effetto di questo bit era che il segmento di testo del programma (si veda
+sez.~\ref{sec:proc_mem_layout} per i dettagli) veniva scritto nella swap la
+prima volta che questo veniva lanciato, e vi permaneva fino al riavvio della
+macchina (da questo il nome di \textsl{sticky bit}); essendo la swap un file
+continuo o una partizione indicizzata direttamente si poteva risparmiare in
+tempo di caricamento rispetto alla ricerca attraverso la struttura del
+filesystem. Lo \textsl{sticky bit} è indicato usando la lettera ``\texttt{t}''
+al posto della ``\texttt{x}'' nei permessi per gli altri.
Ovviamente per evitare che gli utenti potessero intasare la swap solo
l'amministratore era in grado di impostare questo bit, che venne chiamato
altre funzioni che operano sulla ACL. La funzione si limita alla allocazione
iniziale e non inserisce nessun valore nella ACL che resta vuota.
-Si tenga presente che pur essendo \type{acl\_t} un \index{tipo!opaco} tipo
-opaco che identifica ``\textsl{l'oggetto}'' ACL, il valore restituito dalla
-funzione non è altro che un puntatore all'area di memoria allocata per i dati
-richiesti. Pertanto in caso di fallimento verrà restituito un puntatore nullo
-di tipo ``\code{(acl\_t) NULL}'' e si dovrà, in questa come in tutte le
-funzioni seguenti che restituiscono un oggetto di tipo \type{acl\_t},
-confrontare il valore di ritorno della funzione con \val{NULL}.\footnote{a
- voler essere estremamente pignoli si dovrebbe usare ``\code{(acl\_t)
- NULL}'', ma è sufficiente fare un confronto direttamente con \val{NULL}
- essendo cura del compilatore fare le conversioni necessarie.}
+Si tenga presente che pur essendo \type{acl\_t} un tipo opaco che identifica
+``\textsl{l'oggetto}'' ACL, il valore restituito dalla funzione non è altro
+che un puntatore all'area di memoria allocata per i dati richiesti. Pertanto
+in caso di fallimento verrà restituito un puntatore nullo di tipo
+``\code{(acl\_t) NULL}'' e si dovrà, in questa come in tutte le funzioni
+seguenti che restituiscono un oggetto di tipo \type{acl\_t}, confrontare il
+valore di ritorno della funzione con \val{NULL}.\footnote{a voler essere
+ estremamente pignoli si dovrebbe usare ``\code{(acl\_t) NULL}'', ma è
+ sufficiente fare un confronto direttamente con \val{NULL} essendo cura del
+ compilatore fare le conversioni necessarie.}
Una volta che si siano completate le operazioni sui dati di una ACL la memoria
allocata per un oggetto \type{acl\_t} dovrà essere liberata esplicitamente
argomento, ed alloca automaticamente la memoria necessaria. Questa dovrà poi
essere liberata, quando non più necessaria, con \func{acl\_free}. Se
nell'argomento \param{len\_p} si passa un valore puntatore ad una variabile
-intera in questa verrà restituita (come \itindex{value~result~argument}
-\textit{value result argument}) la dimensione della stringa con la
-rappresentazione testuale, non comprendente il carattere nullo finale.
+intera in questa verrà restituita (come \textit{value result argument}) la
+dimensione della stringa con la rappresentazione testuale, non comprendente il
+carattere nullo finale.
La seconda funzione, che permette di controllare con una gran dovizia di
particolari la generazione della stringa contenente la rappresentazione
% Linux specific capabilities
%
\hline
- \const{CAP\_IPC\_LOCK} & Effettuare il \textit{memory
- locking} \itindex{memory~locking} con le
+ \const{CAP\_IPC\_LOCK} & Effettuare il \textit{memory locking} con le
funzioni \func{mlock}, \func{mlockall},
\func{shmctl}, \func{mmap} (vedi
sez.~\ref{sec:proc_mem_lock} e
per le operazioni sugli oggetti di
intercomunicazione fra processi (vedi
sez.~\ref{sec:ipc_sysv}).\\
- \const{CAP\_LEASE} & Creare dei \textit{file lease}
- \itindex{file~lease} (vedi
+ \const{CAP\_LEASE} & Creare dei \textit{file lease} (vedi
sez.~\ref{sec:file_asyncronous_lease})
pur non essendo proprietari del file (dal kernel
2.4).\\
\itindbeg{capability~state}
Le funzioni dell'interfaccia alle \textit{capabilities} definite nelle bozze
-dello standard POSIX.1e prevedono l'uso di un \index{tipo!opaco} tipo di dato
-opaco, \type{cap\_t}, come puntatore ai dati mantenuti nel cosiddetto
+dello standard POSIX.1e prevedono l'uso di un tipo di dato opaco,
+\type{cap\_t}, come puntatore ai dati mantenuti nel cosiddetto
\textit{capability state},\footnote{si tratta in sostanza di un puntatore ad
una struttura interna utilizzata dalle librerie, i cui campi non devono mai
essere acceduti direttamente.} in sono memorizzati tutti i dati delle
La funzione \func{cap\_get\_flag} legge lo stato della capacità indicata
dall'argomento \param{cap} all'interno dell'insieme indicato dall'argomento
-\param{flag} e lo restituisce come \itindex{value~result~argument}
-\textit{value result argument} nella variabile puntata
-dall'argomento \param{value\_p}. Questa deve essere di tipo
+\param{flag} e lo restituisce come \textit{value result argument} nella
+variabile puntata dall'argomento \param{value\_p}. Questa deve essere di tipo
\type{cap\_flag\_value\_t} ed assumerà uno dei valori di
tab.~\ref{tab:cap_value_type}. La funzione consente pertanto di leggere solo
lo stato di una capacità alla volta.
La funzione ritorna l'indirizzo di una stringa contente la descrizione
testuale del contenuto del \textit{capability state} \param{caps} passato come
argomento, e, qualora l'argomento \param{length\_p} sia diverso da \val{NULL},
-restituisce come \itindex{value~result~argument} \textit{value result
- argument} nella variabile intera da questo puntata la lunghezza della
-stringa. La stringa restituita viene allocata automaticamente dalla funzione e
-pertanto dovrà essere liberata con \func{cap\_free}.
+restituisce come \textit{value result argument} nella variabile intera da
+questo puntata la lunghezza della stringa. La stringa restituita viene
+allocata automaticamente dalla funzione e pertanto dovrà essere liberata con
+\func{cap\_free}.
La rappresentazione testuale, che viene usata anche dai programmi di gestione a
riga di comando, prevede che lo stato venga rappresentato con una stringa di
La prima funzione restituisce la stringa (allocata automaticamente e che dovrà
essere liberata con \func{cap\_free}) che corrisponde al valore della
capacità \param{cap}, mentre la seconda restituisce nella variabile puntata
-da \param{cap\_p}, come \itindex{value~result~argument} \textit{value result
- argument}, il valore della capacità rappresentata dalla
-stringa \param{name}.
+da \param{cap\_p}, come \textit{value result argument}, il valore della
+capacità rappresentata dalla stringa \param{name}.
Fin quei abbiamo trattato solo le funzioni di servizio relative alla
manipolazione dei \textit{capability state} come strutture di dati;