X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=757bc13bd60662de3eef6cac44cae2283c1493e0;hp=2fbda9fa35ea0bdd0c9987a51d832f8c025e2e94;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=b3593007c4edd76ecbf7386967c1b25d27eed828 diff --git a/filedir.tex b/filedir.tex index 2fbda9f..757bc13 100644 --- a/filedir.tex +++ b/filedir.tex @@ -100,7 +100,7 @@ relativi campi con i dati specifici di quel filesystem, ed in particolare si dovrà creare anche la relativa versione della funzione \code{mount}. \itindbeg{pathname} -\itindbeg{pathname!resolution} +\itindbeg{pathname~resolution} Come illustrato in fig.~\ref{fig:kstruct_file_system_type} questa funzione restituisce una \textit{dentry}, abbreviazione che sta per \textit{directory @@ -146,7 +146,7 @@ filesystem, e come vedremo questo farà sì che venga eseguita una filesystem. \itindend{pathname} -\itindend{pathname!resolution} +\itindend{pathname~resolution} % Un secondo effetto della chiamata funzione \texttt{mount} di % \kstruct{file\_system\_type} è quello di allocare una struttura @@ -256,11 +256,11 @@ Si noti però come in tab.~\ref{tab:file_inode_operations} non sia presente la funzione \texttt{open} che invece è citata in tab.~\ref{tab:file_file_operations}.\footnote{essa può essere comunque invocata dato che nella struttura \kstruct{inode} è presente anche il - puntatore \func{i\_fop} alla struttura \kstruct{file\_operation} che - fornisce detta funzione.} Questo avviene perché su Linux l'apertura di un -file richiede comunque un'altra operazione che mette in gioco l'omonimo -oggetto del VFS: l'allocazione di una struttura di tipo \kstruct{file} che -viene associata ad ogni file aperto nel sistema. + puntatore \var{i\_fop} alla struttura \kstruct{file\_operation} che fornisce + detta funzione.} Questo avviene perché su Linux l'apertura di un file +richiede comunque un'altra operazione che mette in gioco l'omonimo oggetto del +VFS: l'allocazione di una struttura di tipo \kstruct{file} che viene associata +ad ogni file aperto nel sistema. I motivi per cui viene usata una struttura a parte sono diversi, anzitutto, come illustrato in sez.~\ref{sec:file_fd}, questa è necessaria per le @@ -291,8 +291,8 @@ di dati) dovrà invece ricorrere a quelle fornite dal driver del dispositivo. Come si può notare dall'estratto di fig.~\ref{fig:kstruct_file}, la struttura \kstruct{file} contiene, oltre ad alcune informazioni usate dall'interfaccia dei file descriptor il cui significato emergerà più avanti, il puntatore -\struct{f\_op} ad una struttura \kstruct{file\_operation}. Questa è l'analoga -per i file di \kstruct{inode\_operation}, e definisce le operazioni generiche +\var{f\_op} ad una struttura \kstruct{file\_operation}. Questa è l'analoga per +i file di \kstruct{inode\_operation}, e definisce le operazioni generiche fornite dal VFS per i file. Si sono riportate in tab.~\ref{tab:file_file_operations} le più significative. @@ -1293,7 +1293,7 @@ fanno comunque riferimento allo stesso \itindex{inode} \textit{inode}. Per aggiungere ad una directory una voce che faccia riferimento ad un \itindex{inode} \textit{inode} già esistente si utilizza la funzione -\func{link}; si suole chiamare questo tipo di associazione un collegamento +\funcd{link}; si suole chiamare questo tipo di associazione un collegamento diretto, o \textit{hard link}. Il prototipo della funzione è il seguente: \begin{funcproto}{ @@ -2171,7 +2171,7 @@ volte che si ripete la lettura di una voce sullo stesso \textit{directory stream}. Di questa funzione esiste anche una versione \index{funzioni!rientranti} -rientrante, \func{readdir\_r},\footnote{per usarla è necessario definire una +rientrante, \funcd{readdir\_r},\footnote{per usarla è necessario definire una qualunque delle macro \texttt{\macro{\_POSIX\_C\_SOURCE} >= 1}, \macro{\_XOPEN\_SOURCE}, \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE}, \macro{\_POSIX\_SOURCE}.} che non usa una struttura allocata staticamente, e @@ -2343,12 +2343,12 @@ La funzione legge tutte le voci della directory indicata dall'argomento \struct{dirent}) come argomento della funzione di selezione specificata da \param{filter}; se questa ritorna un valore diverso da zero il puntatore viene inserito in un vettore che viene allocato dinamicamente con \func{malloc}. -Qualora si specifichi un valore \val{NULL} per l'argomento \func{filter} non +Qualora si specifichi un valore \val{NULL} per l'argomento \param{filter} non viene fatta nessuna selezione e si ottengono tutte le voci presenti. -Le voci selezionate possono essere riordinate tramite \func{qsort}, le modalità -del riordinamento possono essere personalizzate usando la funzione -\param{compar} come criterio di ordinamento di \func{qsort}, la funzione +Le voci selezionate possono essere riordinate tramite \funcm{qsort}, le +modalità del riordinamento possono essere personalizzate usando la funzione +\param{compar} come criterio di ordinamento di \funcm{qsort}, la funzione prende come argomenti le due strutture \struct{dirent} da confrontare restituendo un valore positivo, nullo o negativo per indicarne l'ordinamento; alla fine l'indirizzo della lista ordinata dei puntatori alle strutture @@ -2385,7 +2385,7 @@ La funzione \func{alphasort} deriva da BSD ed è presente in Linux fin dalle campo \var{d\_name} delle varie voci). Le \acr{glibc} prevedono come estensione\footnote{le glibc, a partire dalla versione 2.1, effettuano anche l'ordinamento alfabetico tenendo conto delle varie localizzazioni, usando - \func{strcoll} al posto di \func{strcmp}.} anche \func{versionsort}, che + \funcm{strcoll} al posto di \funcm{strcmp}.} anche \func{versionsort}, che ordina i nomi tenendo conto del numero di versione (cioè qualcosa per cui \texttt{file10} viene comunque dopo \texttt{file4}.) @@ -2483,9 +2483,9 @@ chiusura (\texttt{\small 32}) dello stream\footnote{nel nostro caso, uscendo Come accennato in sez.~\ref{sec:proc_fork} a ciascun processo è associata una directory nel filesystem,\footnote{questa viene mantenuta all'interno dei dati - della sua \struct{task\_struct} (vedi fig.~\ref{fig:proc_task_struct}), più + della sua \kstruct{task\_struct} (vedi fig.~\ref{fig:proc_task_struct}), più precisamente nel campo \texttt{pwd} della sotto-struttura - \struct{fs\_struct}.} che è chiamata \textsl{directory corrente} o + \kstruct{fs\_struct}.} che è chiamata \textsl{directory corrente} o \textsl{directory di lavoro} (in inglese \textit{current working directory}). La directory di lavoro è quella da cui si parte quando un \itindsub{pathname}{relativo} \textit{pathname} è espresso in forma relativa, @@ -2640,7 +2640,7 @@ specificata dalla costante \const{P\_tmpdir}.\footnote{le costanti \headfile{stdio.h}.} Di questa funzione esiste una versione \index{funzioni!rientranti} rientrante, -\func{tmpnam\_r}, che non fa nulla quando si passa \val{NULL} come argomento. +\funcm{tmpnam\_r}, che non fa nulla quando si passa \val{NULL} come argomento. Una funzione simile, \funcd{tempnam}, permette di specificare un prefisso per il file esplicitamente, il suo prototipo è: \begin{prototype}{stdio.h}{char *tempnam(const char *dir, const char *pfx)} @@ -3409,7 +3409,7 @@ Queste due funzioni sono una estensione definita in una recente revisione dello standard POSIX (la POSIX.1-2008); sono state introdotte a partire dal kernel 2.6.22, e supportate dalle \acr{glibc} a partire dalla versione 2.6.\footnote{in precedenza, a partire dal kernel 2.6.16, era stata introdotta - la funzione \func{futimesat} seguendo una bozza della revisione dello + la funzione \funcm{futimesat} seguendo una bozza della revisione dello standard poi modificata, questa funzione, sostituita da \func{utimensat}, è stata dichiarata obsoleta, non è supportata da nessuno standard e non deve essere più utilizzata: pertanto non la tratteremo.} La prima è @@ -3971,8 +3971,8 @@ lettura), che però può fornire un valore che è lo stesso per tutti e tre i permessi di sez.~\ref{sec:file_perm_overview} (cioè $666$ nel primo caso e $222$ nel secondo). Per questo motivo il sistema associa ad ogni processo\footnote{è infatti contenuta nel campo \var{umask} della struttura - \struct{fs\_struct}, vedi fig.~\ref{fig:proc_task_struct}.} una maschera di -bit, la cosiddetta \textit{umask}, che viene utilizzata per impedire che + \kstruct{fs\_struct}, vedi fig.~\ref{fig:proc_task_struct}.} una maschera +di bit, la cosiddetta \textit{umask}, che viene utilizzata per impedire che alcuni permessi possano essere assegnati ai nuovi file in sede di creazione. I bit indicati nella maschera vengono infatti cancellati dai permessi quando un nuovo file viene creato.\footnote{l'operazione viene fatta sempre: anche @@ -5317,7 +5317,7 @@ essere solo impostate qualora \param{path} indichi una directory. Inoltre perché la funzione abbia successo la ACL dovrà essere valida, e contenere tutti le voci necessarie, unica eccezione è quella in cui si specifica una ACL vuota per cancellare la ACL di default associata a -\func{path}.\footnote{questo però è una estensione della implementazione delle +\param{path}.\footnote{questo però è una estensione della implementazione delle ACL di Linux, la bozza di standard POSIX.1e prevedeva l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che prende come unico argomento il \textit{pathname} della directory di cui si vuole cancellare l'ACL di @@ -7047,7 +7047,7 @@ questa sezione. Come accennato in sez.~\ref{sec:proc_fork} ogni processo oltre ad una \index{directory~di~lavoro} directory di lavoro, ha anche una directory \textsl{radice}\footnote{entrambe sono contenute in due campi (rispettivamente - \var{pwd} e \var{root}) di \struct{fs\_struct}; vedi + \var{pwd} e \var{root}) di \kstruct{fs\_struct}; vedi fig.~\ref{fig:proc_task_struct}.} che, pur essendo di norma corrispondente alla radice dell'albero di file e directory come visto dal kernel (ed illustrato in sez.~\ref{sec:file_pathname}), ha per il processo il significato