From ee800a27585aeed2f753222dc5ff56fe0bcfb6e0 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Thu, 19 Jan 2012 23:58:52 +0000 Subject: [PATCH] Altre correzioni ed indici --- biblio.bib | 2 +- fileadv.tex | 2 +- filedir.tex | 44 +++++++++++++++++++++++++------------------- ipc.tex | 6 +++--- process.tex | 10 +++++----- prochand.tex | 2 +- socket.tex | 2 +- system.tex | 2 +- 8 files changed, 38 insertions(+), 32 deletions(-) diff --git a/biblio.bib b/biblio.bib index 3e987ac..b15f530 100644 --- a/biblio.bib +++ b/biblio.bib @@ -94,7 +94,7 @@ OPTnote = {}, OPTannote = {} } -@Book{glibc, +@Book{GlibcMan, author = {Sandra Loosemore, Richard M. Stallman, Roland McGrath, Andrew Oram and Ulrich Drepper}, editor = {Free Software Foundation}, title = {The GNU C Library Reference Manual}, diff --git a/fileadv.tex b/fileadv.tex index 4c063d3..dc31814 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -2207,7 +2207,7 @@ ritorno della funzione \func{read} è negativo, uscendo dal programma In presenza di dati invece il programma proseguirà l'esecuzione stampando (\texttt{\small 19--20}) il nome del segnale ottenuto all'interno della -struttura \const{signalfd\_siginfo} letta in \var{siginf}\footnote{per la +struttura \struct{signalfd\_siginfo} letta in \var{siginf}\footnote{per la stampa si è usato il vettore \var{sig\_names} a ciascun elemento del quale corrisponde il nome del segnale avente il numero corrispondente, la cui definizione si è omessa dal codice di fig.~\ref{fig:fiforeporter_code_init} diff --git a/filedir.tex b/filedir.tex index f11da2c..3aae3d7 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1117,7 +1117,7 @@ filesystem anche quando questo risulti occupato; il suo prototipo è: {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{BUSY}] \param{target} è la \index{directory~di~lavoro} + \item[\errcode{EBUSY}] \param{target} è la \index{directory~di~lavoro} directory di lavoro di qualche processo, o contiene dei file aperti, o un altro mount point. \item[\errcode{EAGAIN}] si è chiamata la funzione con \const{MNT\_EXPIRE} @@ -1179,7 +1179,7 @@ Con \const{MNT\_EXPIRE}, che non può essere specificato insieme agli altri due, si marca il \itindex{mount~point} \textit{mount point} di un filesystem non occupato come ``\textsl{in scadenza}'', in tal caso \func{umount2} ritorna con un errore di \errcode{EAGAIN}, mentre in caso di filesystem occupato si -sarebbe ricevuto \errcode{BUSY}. Una volta marcato, se nel frattempo non +sarebbe ricevuto \errcode{EBUSY}. Una volta marcato, se nel frattempo non viene fatto nessun uso del filesystem, ad una successiva chiamata con \const{MNT\_EXPIRE} questo verrà smontato. Questo flag consente di realizzare un meccanismo che smonti automaticamente i filesystem che restano inutilizzati @@ -1190,15 +1190,16 @@ questo è un link simbolico (vedi sez.~\ref{sec:file_symlink}). Questa è una misura di sicurezza introdotta per evitare, per quei filesystem per il quale è prevista una gestione diretta da parte degli utenti, come quelli basati su FUSE,\footnote{il \textit{Filesystem in USEr space} (FUSE) è una delle più - interessanti applicazioni del VFS che consente, tramite un opportuno modulo, - di implementare le funzioni del \textit{Virtual File System} in user space, - così da rendere possibile agli utenti l'implementazione di un loro filesytem - qualunque (con applicazioni di grande interesse come il filesystem cifrato - \textit{encfs} o il filesystem di rete \textit{sshfs}).} che si possano -passare ai programmi che effettuano lo smontaggio dei filesystem, che in -genere sono privilegiati ma consentono di agire solo sui propri \textit{mount - point}, dei link simbolici che puntano ad altri \textit{mount point}, -ottenendo così la possibilità di smontare qualunque filesystem. + interessanti applicazioni del \itindex{Virtual~File~System} VFS che + consente, tramite un opportuno modulo, di implementarne le funzioni in + \textit{user space}, così da rendere possibile l'implementazione di un + qualunque filesytem (con applicazioni di grande interesse come il filesystem + cifrato \textit{encfs} o il filesystem di rete \textit{sshfs}) che possa + essere usato direttamente per conto degli utenti.} che si possano passare +ai programmi che effettuano lo smontaggio dei filesystem, che in genere sono +privilegiati ma consentono di agire solo sui propri \textit{mount point}, dei +link simbolici che puntano ad altri \textit{mount point}, ottenendo così la +possibilità di smontare qualunque filesystem. Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD, @@ -1245,12 +1246,16 @@ del filesystem stesso. \end{figure} Le \acr{glibc} provvedono infine una serie di funzioni per la gestione dei due -file \conffile{/etc/fstab} ed \conffile{/etc/mtab}, che convenzionalmente sono -usati in quasi tutti i sistemi unix-like per mantenere rispettivamente le -informazioni riguardo ai filesystem da montare e a quelli correntemente -montati. Le funzioni servono a leggere il contenuto di questi file in -opportune strutture \struct{fstab} e \struct{mntent}, e, nel caso di -\conffile{/etc/mtab}, per inserire e rimuovere le voci presenti nel file. +file \conffile{/etc/fstab}\footnote{più precisamente \funcm{setfsent}, + \funcm{getfsent}, \funcm{getfsfile}, \funcm{getfsspec}, \funcm{endfsent}.} +ed \conffile{/etc/mtab}\footnote{più precisamente \funcm{setmntent}, + \funcm{getmntent},\funcm{getmntent\_r}, \funcm{addmntent},\funcm{endmntent}, + \funcm{hasmntopt}.} che convenzionalmente sono usati in quasi tutti i +sistemi unix-like per mantenere rispettivamente le informazioni riguardo ai +filesystem da montare e a quelli correntemente montati. Le funzioni servono a +leggere il contenuto di questi file in opportune strutture \struct{fstab} e +\struct{mntent}, e, nel caso di \conffile{/etc/mtab}, per inserire e rimuovere +le voci presenti nel file. In generale si dovrebbero usare queste funzioni, in particolare quelle relative a \conffile{/etc/mtab}, quando si debba scrivere un programma che @@ -1260,17 +1265,18 @@ di \conffile{/etc/mtab} è considerato una pratica obsoleta, in quanto se non aggiornato correttamente (cosa che è impossibile se la radice è montata in sola lettura) il suo contenuto diventa fuorviante. -Pe questo motivo il suo utilizzo viene deprecato ed in molti casi viene già +Per questo motivo il suo utilizzo viene deprecato ed in molti casi viene già oggi sostituito da un link simbolico a \procfile{/proc/mounts}, che contiene una versione degli stessi contenuti (vale a dire l'elenco dei filesystem montati) generata direttamente dal kernel, e quindi sempre disponibile e sempre aggiornata. Per questo motivo tralasceremo la trattazione, di queste -funzioni, rimandando al manuale delle \acr{glibc} \cite{glibc} per la +funzioni, rimandando al manuale delle \acr{glibc} \cite{GlibcMan} per la documentazione completa. % TODO (bassa priorità) scrivere delle funzioni (getfsent e getmntent &C) % TODO (bassa priorità) documentare ? swapon e swapoff (man 2 ...) + \section{La gestione di file e directory} \label{sec:file_dir} diff --git a/ipc.tex b/ipc.tex index f3a2ec7..56e715b 100644 --- a/ipc.tex +++ b/ipc.tex @@ -1222,7 +1222,7 @@ cui queste strutture vengono mantenute dal kernel.\footnote{lo schema \label{fig:ipc_msqid_ds} \end{figure} -A ciascuna coda è associata una struttura \struct{msgid\_ds}, la cui +A ciascuna coda è associata una struttura \struct{msqid\_ds}, la cui definizione, è riportata in fig.~\ref{fig:ipc_msqid_ds}. In questa struttura il kernel mantiene le principali informazioni riguardo lo stato corrente della coda.\footnote{come accennato questo vale fino ai kernel della serie 2.2.x, @@ -2167,7 +2167,7 @@ Dato che, come già accennato in precedenza, in caso di uscita inaspettata i semafori possono restare occupati, abbiamo visto come \func{semop} permetta di attivare un meccanismo di ripristino attraverso l'uso del flag \const{SEM\_UNDO}. Il meccanismo è implementato tramite una apposita struttura -\struct{sem\_undo}, associata ad ogni processo per ciascun semaforo che esso +\kstruct{sem\_undo}, associata ad ogni processo per ciascun semaforo che esso ha modificato; all'uscita i semafori modificati vengono ripristinati, e le strutture disallocate. Per mantenere coerente il comportamento queste strutture non vengono ereditate attraverso una \func{fork} (altrimenti si @@ -2208,7 +2208,7 @@ Se invece tutte le operazioni possono avere successo queste vengono eseguite immediatamente, dopo di che il kernel esegue una scansione della coda di attesa (a partire da \var{sem\_pending}) per verificare se qualcuna delle operazioni sospese in precedenza può essere eseguita, nel qual caso la -struttura \struct{sem\_queue} viene rimossa e lo stato del processo associato +struttura \kstruct{sem\_queue} viene rimossa e lo stato del processo associato all'operazione (\var{sleeper}) viene riportato a \textit{running}; il tutto viene ripetuto fin quando non ci sono più operazioni eseguibili o si è svuotata la coda. Per gestire il meccanismo del ripristino tutte le volte che diff --git a/process.tex b/process.tex index 5e30c7a..e7bdfe0 100644 --- a/process.tex +++ b/process.tex @@ -2540,7 +2540,7 @@ Il C però non consente di effettuare un salto ad una etichetta definita in un'altra funzione, per cui se l'errore avviene in una funzione, e la sua gestione ordinaria è in un'altra, occorre usare quello che viene chiamato un \textsl{salto non-locale}. Il caso classico in cui si ha questa necessità, -citato sia in \cite{APUE} che in \cite{glibc}, è quello di un programma nel +citato sia in \cite{APUE} che in \cite{GlibcMan}, è quello di un programma nel cui corpo principale vengono letti dei dati in ingresso sui quali viene eseguita, tramite una serie di funzioni di analisi, una scansione dei contenuti, da cui si ottengono le indicazioni per l'esecuzione di opportune @@ -2553,10 +2553,10 @@ caso si dovrebbe gestire, per ciascuna fase, tutta la casistica del passaggio all'indietro di tutti gli errori rilevabili dalle funzioni usate nelle fasi successive. Questo comporterebbe una notevole complessità, mentre sarebbe molto più comodo poter tornare direttamente al ciclo di lettura principale, -scartando l'input come errato.\footnote{a meno che, come precisa \cite{glibc}, - alla chiusura di ciascuna fase non siano associate operazioni di pulizia - specifiche (come deallocazioni, chiusure di file, ecc.), che non potrebbero - essere eseguite con un salto non-locale.} +scartando l'input come errato.\footnote{a meno che, come precisa + \cite{GlibcMan}, alla chiusura di ciascuna fase non siano associate + operazioni di pulizia specifiche (come deallocazioni, chiusure di file, + ecc.), che non potrebbero essere eseguite con un salto non-locale.} Tutto ciò può essere realizzato proprio con un salto non-locale; questo di norma viene realizzato salvando il contesto dello \itindex{stack} diff --git a/prochand.tex b/prochand.tex index 985a6af..76b801c 100644 --- a/prochand.tex +++ b/prochand.tex @@ -3216,7 +3216,7 @@ Si tenga presente che trattandosi di macro l'argomento \param{cpu} può essere valutato più volte. Questo significa ad esempio che non si può usare al suo posto una funzione o un'altra macro, altrimenti queste verrebbero eseguite più volte, l'argomento cioè non deve avere \textsl{effetti collaterali} (in gergo -\itindex{side!effects} \textit{side effects}).\footnote{nel linguaggio C si +\itindex{side~effects} \textit{side effects}).\footnote{nel linguaggio C si parla appunto di \textit{side effects} quando si usano istruzioni la cui valutazione comporta effetti al di fuori dell'istruzione stessa, come il caso indicato in cui si passa una funzione ad una macro che usa l'argomento diff --git a/socket.tex b/socket.tex index 9f1feb6..4b36783 100644 --- a/socket.tex +++ b/socket.tex @@ -262,7 +262,7 @@ utilizzare fra quelli disponibili nella famiglia scelta. L'interfaccia dei socket permette di scegliere lo stile di comunicazione indicando il tipo di socket con l'argomento \param{type} di \func{socket}. Linux mette a disposizione vari tipi di socket (che corrispondono a quelli che il manuale -della \acr{glibc} \cite{glibc} chiama \textit{styles}) identificati dalle +della \acr{glibc} \cite{GlibcMan} chiama \textit{styles}) identificati dalle seguenti costanti:\footnote{le pagine di manuale POSIX riportano solo i primi tre tipi, Linux supporta anche gli altri, come si può verificare nel file \texttt{include/linux/net.h} dei sorgenti del kernel.} diff --git a/system.tex b/system.tex index 8f07483..eaf88dd 100644 --- a/system.tex +++ b/system.tex @@ -1903,7 +1903,7 @@ portabilità è un requisito, le \acr{glibc} provvedono anche un suo omonimo una lettura approfondita del meccanismo descritto nell'RFC~1305, ci limitiamo a descrivere in tab.~\ref{tab:sys_timex_mode} i principali valori utilizzabili per il campo \var{mode}, un elenco più dettagliato del significato dei vari -campi della struttura \struct{timex} può essere ritrovato in \cite{glibc}. +campi della struttura \struct{timex} può essere ritrovato in \cite{GlibcMan}. \begin{table}[!htb] \footnotesize -- 2.30.2