Correzioni multiple agli indici delle funzioni, inserita macro per
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 18 Jan 2012 23:22:17 +0000 (23:22 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 18 Jan 2012 23:22:17 +0000 (23:22 +0000)
introdurre le semplici menzioni di funzioni di libreria poco usate e
di cui non viene fornito il prototipo.

18 files changed:
fileadv.tex
filedir.tex
filestd.tex
fileunix.tex
intro.tex
ipc.tex
macro.tex
netlayer.tex
network.tex
othersock.tex
process.tex
prochand.tex
session.tex
signal.tex
sockctrl.tex
system.tex
tcpsock.tex
trasplayer.tex

index 8d62772..4c063d3 100644 (file)
@@ -244,14 +244,14 @@ possono avere due processi diversi che aprono lo stesso file.
 
 La richiesta di un \textit{file lock} prevede una scansione della lista per
 determinare se l'acquisizione è possibile, ed in caso positivo l'aggiunta di
-un nuovo elemento.\footnote{cioè una nuova struttura \struct{file\_lock}.}
+un nuovo elemento.\footnote{cioè una nuova struttura \kstruct{file\_lock}.}
 Nel caso dei blocchi creati con \func{flock} la semantica della funzione
 prevede che sia \func{dup} che \func{fork} non creino ulteriori istanze di un
 \textit{file lock} quanto piuttosto degli ulteriori riferimenti allo
 stesso. Questo viene realizzato dal kernel secondo lo schema di
 fig.~\ref{fig:file_flock_struct}, associando ad ogni nuovo \textit{file lock}
 un puntatore\footnote{il puntatore è mantenuto nel campo \var{fl\_file} di
-  \struct{file\_lock}, e viene utilizzato solo per i \textit{file lock} creati
+  \kstruct{file\_lock}, e viene utilizzato solo per i \textit{file lock} creati
   con la semantica BSD.} alla voce nella \itindex{file~table} \textit{file
   table} da cui si è richiesto il blocco, che così ne identifica il titolare.
 
@@ -460,7 +460,7 @@ sez.~\ref{sec:file_flock}) esaminiamo più in dettaglio come viene gestito dal
 kernel. Lo schema delle strutture utilizzate è riportato in
 fig.~\ref{fig:file_posix_lock}; come si vede esso è molto simile all'analogo
 di fig.~\ref{fig:file_flock_struct}:\footnote{in questo caso nella figura si
-  sono evidenziati solo i campi di \struct{file\_lock} significativi per la
+  sono evidenziati solo i campi di \kstruct{file\_lock} significativi per la
   semantica POSIX, in particolare adesso ciascuna struttura contiene, oltre al
   \ids{PID} del processo in \var{fl\_pid}, la sezione di file che viene
   bloccata grazie ai campi \var{fl\_start} e \var{fl\_end}.  La struttura è
@@ -481,7 +481,7 @@ voce nella \itindex{file~table} \textit{file table}, ma con il valore del
 Quando si richiede un \textit{file lock} il kernel effettua una scansione di
 tutti i blocchi presenti sul file\footnote{scandisce cioè la
   \itindex{linked~list} \textit{linked list} delle strutture
-  \struct{file\_lock}, scartando automaticamente quelle per cui
+  \kstruct{file\_lock}, scartando automaticamente quelle per cui
   \var{fl\_flags} non è \const{FL\_POSIX}, così che le due interfacce restano
   ben separate.}  per verificare se la regione richiesta non si sovrappone ad
 una già bloccata, in caso affermativo decide in base al tipo di blocco, in
@@ -1935,7 +1935,7 @@ descriptor è \funcd{signalfd},\footnote{in realtà quella riportata è
   versioni diverse della \textit{system call}; una prima versione,
   \func{signalfd}, introdotta nel kernel 2.6.22 e disponibile con le
   \acr{glibc} 2.8 che non supporta l'argomento \texttt{flags}, ed una seconda
-  versione, \func{signalfd4}, introdotta con il kernel 2.6.27 e che è quella
+  versione, \funcm{signalfd4}, introdotta con il kernel 2.6.27 e che è quella
   che viene sempre usata a partire dalle \acr{glibc} 2.9, che prende un
   argomento aggiuntivo \code{size\_t sizemask} che indica la dimensione della
   maschera dei segnali, il cui valore viene impostato automaticamente dalle
@@ -4516,7 +4516,7 @@ maniera atomica a partire da un certa posizione sul file. Per questo motivo a
 partire dal kernel 2.6.30 sono state introdotte anche per l'\textsl{I/O
   vettorizzato} le analoghe delle funzioni \func{pread} e \func{pwrite} (vedi
 sez.~\ref{sec:file_read} e \ref{sec:file_write}); le due funzioni sono
-\funcd{preadv} e \func{pwritev} ed i rispettivi prototipi sono:\footnote{le
+\funcd{preadv} e \funcd{pwritev} ed i rispettivi prototipi sono:\footnote{le
   due funzioni sono analoghe alle omonime presenti in BSD; le \textit{system
     call} usate da Linux (introdotte a partire dalla versione 2.6.30)
   utilizzano degli argomenti diversi per problemi collegati al formato a 64
@@ -5028,7 +5028,7 @@ La funzione copia \param{len} byte del contenuto di una \textit{pipe} su di
 un'altra; \param{fd\_in} deve essere il capo in lettura della \textit{pipe}
 sorgente e \param{fd\_out} il capo in scrittura della \textit{pipe}
 destinazione; a differenza di quanto avviene con \func{read} i dati letti con
-\func{tee} da \func{fd\_in} non vengono \textsl{consumati} e restano
+\func{tee} da \param{fd\_in} non vengono \textsl{consumati} e restano
 disponibili sulla \textit{pipe} per una successiva lettura (di nuovo per il
 comportamento delle \textit{pipe} si veda sez.~\ref{sec:ipc_unix}). Al
 momento\footnote{quello della stesura di questo paragrafo, avvenuta il Gennaio
index 2fbda9f..757bc13 100644 (file)
@@ -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
index d5772ed..c189164 100644 (file)
@@ -465,8 +465,8 @@ la funzione \funcd{clearerr}, il cui prototipo è:
 \noindent in genere si usa questa funzione una volta che si sia identificata e
 corretta la causa di un errore per evitare di mantenere i flag attivi, così da
 poter rilevare una successiva ulteriore condizione di errore. Di questa
-funzione esiste una analoga \func{clearerr\_unlocked} che non esegue il blocco
-dello \textit{stream} (vedi sez.~\ref{sec:file_stream_thread}).
+funzione esiste una analoga \funcm{clearerr\_unlocked} che non esegue il
+blocco dello \textit{stream} (vedi sez.~\ref{sec:file_stream_thread}).
 
 
 \subsection{Input/output binario}
@@ -1168,8 +1168,8 @@ la stringa non serve più, onde evitare \itindex{memory~leak} \textit{memory
 
 % TODO verificare se mettere prototipi di \func{dprintf} e \func{vdprintf}
 
-Infine una ulteriore estensione GNU definisce le due funzioni \func{dprintf} e
-\func{vdprintf}, che prendono un file descriptor al posto dello
+Infine una ulteriore estensione GNU definisce le due funzioni \funcm{dprintf} e
+\funcm{vdprintf}, che prendono un file descriptor al posto dello
 \textit{stream}. Altre estensioni permettono di scrivere con caratteri
 estesi. Anche queste funzioni, il cui nome è generato dalle precedenti
 funzioni aggiungendo una \texttt{w} davanti a \texttt{print}, sono trattate in
@@ -1197,8 +1197,8 @@ famiglia \func{scanf}; fra queste le tre più importanti sono \funcd{scanf},
     di errore o fine del file viene invece restituito \val{EOF}.}
 \end{functions}
 \noindent e come per le analoghe funzioni di scrittura esistono le relative
-\func{vscanf}, \func{vfscanf} \func{vsscanf} che usano un puntatore ad una
-lista di argomenti.
+\funcm{vscanf}, \funcm{vfscanf} e \funcm{vsscanf} che usano un puntatore ad
+una lista di argomenti.
 
 Tutte le funzioni della famiglia delle \func{scanf} vogliono come argomenti i
 puntatori alle variabili che dovranno contenere le conversioni; questo è un
@@ -1326,6 +1326,7 @@ gran parte dei casi un intero a 32 bit, questo diventa un problema quando la
 posizione sul file viene espressa con un valore a 64 bit come accade nei
 sistemi più moderni.
 
+% TODO: mettere prototipi espliciti fseeko e ftello o menzione?
 
 
 \section{Funzioni avanzate}
@@ -1528,6 +1529,8 @@ scelta, si può forzare lo scarico dei dati sul file con la funzione
   \macro{\_SVID\_SOURCE} o \macro{\_GNU\_SOURCE}.} che non effettua il blocco
 dello stream.
 
+% TODO aggiungere prototipo \func{fflush\_unlocked}?
+
 Se \param{stream} è \val{NULL} lo scarico dei dati è forzato per tutti gli
 \textit{stream} aperti. Esistono però circostanze, ad esempio quando si vuole
 essere sicuri che sia stato eseguito tutto l'output su terminale, in cui serve
index 3f4d4bb..3a16ddd 100644 (file)
@@ -77,19 +77,19 @@ quest'ultima tabella.
 
 La \itindex{file~table} \textit{file table} è una tabella che contiene una
 voce per ciascun file che è stato aperto nel sistema. In Linux è costituita da
-strutture di tipo \struct{file}; in ciascuna di esse sono tenute varie
-informazioni relative al file, fra cui:
+puntatori alle strutture di tipo \kstruct{file} di fig.~\ref{fig:kstruct_file}
+che come illustrano mantengono varie informazioni relative al file, fra cui:
 \begin{itemize*}
 \item lo stato del file (nel campo \var{f\_flags}).
 \item il valore della posizione corrente (l'\textit{offset}) nel file (nel
   campo \var{f\_pos}).
 \item un puntatore \itindex{inode} all'inode\footnote{nel kernel 2.4.x si è in
-    realtà passati ad un puntatore ad una struttura \struct{dentry} che punta
-    a sua volta \itindex{inode} all'inode passando per la nuova struttura del
-    VFS.}  del file.
-%\item un puntatore alla tabella delle funzioni \footnote{la struttura
-%    \var{f\_op} descritta in sez.~\ref{sec:file_vfs_work}} che si possono usare
- sul file.
+    realtà passati ad un puntatore ad una struttura \kstruct{dentry} che punta
+    a sua volta \itindex{inode} all'\textit{inode} passando per la nuova
+    struttura del VFS.} del file.
+\item un puntatore \var{f\_op} alla tabella delle funzioni \footnote{quelle
+    della struttura \kstruct{file\_operation}, descritte in
+    tab.~\ref{tab:file_file_operations}.} che si possono usare sul file.
 \end{itemize*}
 
 In fig.~\ref{fig:file_proc_file} si è riportato uno schema in cui è illustrata
@@ -230,7 +230,7 @@ quella che crea l'associazione fra un \textit{pathname} ed un
 
 
 La funzione apre il file usando il primo file descriptor libero, e crea
-l'opportuna voce, cioè la struttura \struct{file}, nella \itindex{file~table}
+l'opportuna voce, cioè la struttura \kstruct{file}, nella \itindex{file~table}
 \textit{file table} del processo.  Viene sempre restituito come valore di
 ritorno il file descriptor con il valore più basso disponibile.
 
@@ -412,7 +412,7 @@ sez.~\ref{sec:file_perm_management}) per il processo.
 La funzione prevede diverse opzioni, che vengono specificate usando vari bit
 dell'argomento \param{flags}.  Alcuni di questi bit vanno anche a costituire
 il flag di stato del file (o \textit{file status flag}), che è mantenuto nel
-campo \var{f\_flags} della struttura \struct{file} (al solito si veda lo schema
+campo \var{f\_flags} della struttura \kstruct{file} (al solito si veda lo schema
 di fig.~\ref{fig:file_proc_file}).  Essi sono divisi in tre categorie
 principali:
 \begin{itemize*}
@@ -507,7 +507,7 @@ di ripetere tre volte il comando prima di eseguire lo shutdown).
 
 Come già accennato in sez.~\ref{sec:file_fd} a ciascun file aperto è associata
 una \textsl{posizione corrente nel file} (il cosiddetto \textit{file offset},
-mantenuto nel campo \var{f\_pos} di \struct{file}) espressa da un numero intero
+mantenuto nel campo \var{f\_pos} di \kstruct{file}) espressa da un numero intero
 positivo come numero di byte dall'inizio del file. Tutte le operazioni di
 lettura e scrittura avvengono a partire da questa posizione che viene
 automaticamente spostata in avanti del numero di byte letti o scritti.
@@ -725,10 +725,10 @@ posizione \param{offset}, nel buffer \param{buf}.
 \end{prototype}
 
 La funzione prende esattamente gli stessi argomenti di \func{read} con lo
-stesso significato, a cui si aggiunge l'argomento \func{offset} che indica una
-posizione sul file. Identico è il comportamento ed il valore di ritorno. La
-funzione serve quando si vogliono leggere dati dal file senza modificare la
-posizione corrente.
+stesso significato, a cui si aggiunge l'argomento \param{offset} che indica
+una posizione sul file. Identico è il comportamento ed il valore di
+ritorno. La funzione serve quando si vogliono leggere dati dal file senza
+modificare la posizione corrente.
 
 L'uso di \func{pread} è equivalente all'esecuzione di una \func{read} seguita
 da una \func{lseek} che riporti al valore precedente la posizione corrente sul
@@ -841,7 +841,7 @@ Il primo caso è quello in cui due processi diversi aprono lo stesso file su
 disco; sulla base di quanto visto in sez.~\ref{sec:file_fd} avremo una
 situazione come quella illustrata in fig.~\ref{fig:file_mult_acc}: ciascun
 processo avrà una sua voce nella \textit{file table} referenziata da un
-diverso file descriptor nella sua \struct{file\_struct}. Entrambe le voci
+diverso file descriptor nella sua \kstruct{file\_struct}. Entrambe le voci
 nella \itindex{file~table} \textit{file table} faranno però riferimento allo
 stesso \itindex{inode} inode su disco.
 
@@ -862,7 +862,7 @@ che:
   prima impostata alla dimensione corrente del file letta \itindex{inode}
   dall'inode. Dopo la scrittura il file viene automaticamente esteso.
 \item l'effetto di \func{lseek} è solo quello di cambiare il campo
-  \var{f\_pos} nella struttura \struct{file} della \itindex{file~table}
+  \var{f\_pos} nella struttura \kstruct{file} della \itindex{file~table}
   \textit{file table}, non c'è nessuna operazione sul file su disco. Quando la
   si usa per porsi alla fine del file la posizione viene impostata leggendo la
   dimensione corrente \itindex{inode} dall'inode.
@@ -882,7 +882,7 @@ figlio all'esecuzione di una \func{fork} (si ricordi quanto detto in
 sez.~\ref{sec:proc_fork}). La situazione è illustrata in
 fig.~\ref{fig:file_acc_child}; dato che il processo figlio riceve una copia
 dello spazio di indirizzi del padre, riceverà anche una copia di
-\struct{file\_struct} e relativa tabella dei file aperti.
+\kstruct{file\_struct} e relativa tabella dei file aperti.
 
 In questo modo padre e figlio avranno gli stessi file descriptor che faranno
 riferimento alla stessa voce nella \textit{file table}, condividendo così la
@@ -894,10 +894,10 @@ corrente nel file varierà per entrambi i processi (in quanto verrà modificato
 Si noti inoltre che anche i flag di stato del file (quelli impostati
 dall'argomento \param{flag} di \func{open}) essendo tenuti nella voce della
 \textit{file table}\footnote{per la precisione nel campo \var{f\_flags} di
-  \struct{file}.}, vengono in questo caso condivisi. Ai file però sono
+  \kstruct{file}.}, vengono in questo caso condivisi. Ai file però sono
 associati anche altri flag, dei quali l'unico usato al momento è
 \const{FD\_CLOEXEC}, detti \textit{file descriptor flags}. Questi ultimi sono
-tenuti invece in \struct{file\_struct}, e perciò sono specifici di ciascun
+tenuti invece in \kstruct{file\_struct}, e perciò sono specifici di ciascun
 processo e non vengono modificati dalle azioni degli altri anche in caso di
 condivisione della stessa voce della \textit{file table}.
 
@@ -1055,7 +1055,7 @@ file descriptor è una copia esatta del precedente ed entrambi possono essere
 interscambiati nell'uso. Per capire meglio il funzionamento della funzione si
 può fare riferimento a fig.~\ref{fig:file_dup}: l'effetto della funzione è
 semplicemente quello di copiare il valore nella struttura
-\struct{file\_struct}, cosicché anche il nuovo file descriptor fa riferimento
+\kstruct{file\_struct}, cosicché anche il nuovo file descriptor fa riferimento
 alla stessa voce nella \textit{file table}; per questo si dice che il nuovo
 file descriptor è \textsl{duplicato}, da cui il nome della funzione.
 
@@ -1254,14 +1254,14 @@ prevista anche l'aggiunta di un ulteriore argomento finale, \param{flags}.
      \func{fstatat}   &$\bullet$&\func{stat},\func{lstat}  \\
      \func{utimensat} &$\bullet$&\func{utimes},\func{lutimes}\\
      \func{linkat}    &$\bullet$\footnotemark&\func{link}    \\
-     \func{mkdirat}   & --      &\func{mkdir}   \\
-     \func{mknodat}   & --      &\func{mknod}   \\
+     \funcm{mkdirat}  & --      &\func{mkdir}   \\
+     \funcm{mknodat}  & --      &\func{mknod}   \\
      \func{openat}    & --      &\func{open}    \\
-     \func{readlinkat}& --      &\func{readlink}\\
-     \func{renameat}  & --      &\func{rename}  \\
-     \func{symlinkat} & --      &\func{symlink} \\
+     \funcm{readlinkat}& --     &\func{readlink}\\
+     \funcm{renameat} & --      &\func{rename}  \\
+     \funcm{symlinkat}& --      &\func{symlink} \\
      \func{unlinkat}  &$\bullet$&\func{unlink},\func{rmdir}  \\
-     \func{mkfifoat}  & --      &\func{mkfifo}  \\
+     \funcm{mkfifoat} & --      &\func{mkfifo}  \\
     \hline
   \end{tabular}
   \caption{Corrispondenze fra le nuove funzioni ``\textit{at}'' e le
@@ -1272,7 +1272,10 @@ prevista anche l'aggiunta di un ulteriore argomento finale, \param{flags}.
 \footnotetext{in questo caso l'argomento \param{flags} è disponibile ed
   utilizzabile solo a partire dal kernel 2.6.18.}
 
-% TODO manca prototipo di fchmodat
+% TODO manca prototipo di fchmodat, verificare se metterlo o metter menzione
+% TODO manca prototipo di fstatat, verificare se metterlo o metter menzione
+% TODO manca prototipo di linkat, verificare se metterlo o metter menzione
+% TODO manca prototipo di utimensat, verificare se metterlo o metter menzione
 
 Per tutte le funzioni che lo prevedono, a parte \func{unlinkat} e
 \funcd{faccessat}, l'ulteriore argomento è stato introdotto solo per fornire
@@ -1293,7 +1296,7 @@ che \func{lchown}; il suo prototipo è:
   \funcdecl{int fchownat(int dirfd, const char *pathname, uid\_t owner, gid\_t
     group, int flags)}
 
-  .Modifica la proprietà di un file.
+  Modifica la proprietà di un file.
   
   \bodydesc{la funzione restituisce gli stessi valori e gli stessi codici di
     errore di \func{chown}, ed in più:
@@ -1378,6 +1381,12 @@ in cui questo è una directory, se però si imposta \param{flags} al valore di
 caso \param{pathname} deve essere una directory, che sarà rimossa qualora
 risulti vuota.
 
+% TODO manca prototipo e motivazione di fexecve, da trattare qui in quanto
+% inserita nello stesso standard e da usare con openat, vedi 
+% http://pubs.opengroup.org/onlinepubs/9699939699/toc.pdf
+
+
+
 
 \subsection{La funzione \func{fcntl}}
 \label{sec:file_fcntl}
index 117bebd..500181c 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -340,7 +340,7 @@ la cui corrispondenza ad un nome espresso in caratteri è inserita nei due file
 \conffile{/etc/passwd} e \conffile{/etc/group}.\footnote{in realtà negli
   sistemi più moderni, come vedremo in sez.~\ref{sec:sys_user_group} queste
   informazioni possono essere mantenute, con l'uso del
-  \itindex{Name~Service~Switch} \textit{Name Service Switch}, su varie
+  \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}, su varie
   tipologie di supporti, compresi server centralizzati come LDAP.}  Questi
 identificativi sono l'\textit{user identifier}, detto in breve
 \textsl{user-ID}, ed indicato dall'acronimo \ids{UID}, e il \textit{group
@@ -515,7 +515,7 @@ nomi che indicano le directory che lo compongono. Dato che la directory radice
 sta in cima all'albero, essa viene indicata semplicemente con il
 \textit{pathname} \file{/}.
 
-\itindbeg{pathname!resolution}
+\itindbeg{pathname~resolution}
 
 Un file può essere indicato rispetto ad una directory semplicemente
 specificandone il nome, il manuale della \acr{glibc} chiama i nomi contenuti
@@ -560,7 +560,7 @@ questo caso una directory superiore, il nome ``\file{..}''  farà riferimento
 alla radice stessa.
 
 \itindend{pathname}
-\itindend{pathname!resolution}
+\itindend{pathname~resolution}
 
 
 \subsection{I tipi di file}
@@ -938,7 +938,7 @@ presenti neanche in System V) sono state tralasciate.
 Le funzionalità implementate sono principalmente il meccanismo di
 intercomunicazione fra i processi e la memoria condivisa (il cosiddetto System
 V IPC, che vedremo in sez.~\ref{sec:ipc_sysv}) le funzioni della famiglia
-\func{hsearch} e \func{drand48}, \func{fmtmsg} e svariate funzioni
+\funcm{hsearch} e \funcm{drand48}, \funcm{fmtmsg} e svariate funzioni
 matematiche.
 
 
@@ -1350,7 +1350,7 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
   a 64 bit nelle funzioni di gestione dei file (non supportati in certi
   sistemi), caratterizzate dal suffisso \texttt{64} aggiunto ai vari nomi di
   tipi di dato e funzioni (come \type{off64\_t} al posto di \type{off\_t} o
-  \func{lseek64} al posto di \func{lseek}).
+  \funcm{lseek64} al posto di \func{lseek}).
 
   Le funzioni di questa interfaccia alternativa sono state proposte come una
   estensione ad uso di transizione per le \textit{Single UNIX Specification},
@@ -1402,10 +1402,10 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
 
   Le funzioni di libreria che vengono messe sotto controllo quando questa
   funzionalità viene attivata sono, al momento della stesura di queste note,
-  le seguenti: \func{memcpy}, \func{mempcpy}, \func{memmove}, \func{memset},
-  \func{stpcpy}, \func{strcpy}, \func{strncpy}, \func{strcat}, \func{strncat},
-  \func{sprintf}, \func{snprintf}, \func{vsprintf}, \func{vsnprintf}, e
-  \func{gets}.
+  le seguenti: \funcm{memcpy}, \funcm{mempcpy}, \funcm{memmove},
+  \funcm{memset}, \funcm{stpcpy}, \funcm{strcpy}, \funcm{strncpy},
+  \funcm{strcat}, \funcm{strncat}, \func{sprintf}, \func{snprintf},
+  \func{vsprintf}, \func{vsnprintf}, e \func{gets}.
 
   La macro prevede due valori, con \texttt{1} vengono eseguiti dei controlli
   di base che non cambiano il comportamento dei programmi se si richiede una
diff --git a/ipc.tex b/ipc.tex
index e22736f..f3a2ec7 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -2193,7 +2193,7 @@ Alla creazione di un nuovo insieme viene allocata una nuova strutture
 \struct{semid\_ds} ed il relativo vettore di strutture \struct{sem}. Quando si
 richiede una operazione viene anzitutto verificato che tutte le operazioni
 possono avere successo; se una di esse comporta il blocco del processo il
-kernel crea una struttura \struct{sem\_queue} che viene aggiunta in fondo alla
+kernel crea una struttura \kstruct{sem\_queue} che viene aggiunta in fondo alla
 coda di attesa associata a ciascun insieme di semafori\footnote{che viene
   referenziata tramite i campi \var{sem\_pending} e \var{sem\_pending\_last}
   di \struct{semid\_ds}.}. 
@@ -2213,7 +2213,7 @@ 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
 per un'operazione si è specificato il flag \const{SEM\_UNDO} viene mantenuta
-per ciascun insieme di semafori una apposita struttura \struct{sem\_undo} che
+per ciascun insieme di semafori una apposita struttura \kstruct{sem\_undo} che
 contiene (nel vettore puntato dal campo \var{semadj}) un valore di
 aggiustamento per ogni semaforo cui viene sommato l'opposto del valore usato
 per l'operazione.
@@ -2224,7 +2224,7 @@ all'insieme di cui fa parte il semaforo, che viene usata per invalidare le
 strutture se questo viene cancellato o per azzerarle se si è eseguita una
 operazione con \func{semctl}; l'altra associata al processo che ha eseguito
 l'operazione;\footnote{attraverso il campo \var{semundo} di
-  \struct{task\_struct}, come mostrato in \ref{fig:ipc_sem_schema}.} quando un
+  \kstruct{task\_struct}, come mostrato in \ref{fig:ipc_sem_schema}.} quando un
 processo termina, la lista ad esso associata viene scandita e le operazioni
 applicate al semaforo.  Siccome un processo può accumulare delle richieste di
 ripristino per semafori differenti chiamate attraverso diverse chiamate a
@@ -3658,7 +3658,7 @@ Se la dimensione specificata da \param{msg\_len} non è sufficiente a contenere
 il messaggio, entrambe le funzioni, al contrario di quanto avveniva nelle code
 di messaggi di SysV, ritornano un errore di \errcode{EMSGSIZE} senza estrarre
 il messaggio.  È pertanto opportuno eseguire sempre una chiamata a
-\func{mq\_getaddr} prima di eseguire una ricezione, in modo da ottenere la
+\func{mq\_getattr} prima di eseguire una ricezione, in modo da ottenere la
 dimensione massima dei messaggi sulla coda, per poter essere in grado di
 allocare dei buffer sufficientemente ampi per la lettura.
 
@@ -3729,7 +3729,7 @@ valori di tab.~\ref{tab:sigevent_sigev_notify}.\footnote{la pagina di manuale
   \const{SIGEV\_SIGNAL}).} Il metodo consigliato è quello di usare
 \const{SIGEV\_SIGNAL} usando il campo \var{sigev\_signo} per indicare il quale
 segnale deve essere inviato al processo. Inoltre il campo \var{sigev\_value} è
-un puntatore ad una struttura \struct{sigval\_t} (definita in
+un puntatore ad una struttura \struct{sigval} (definita in
 fig.~\ref{fig:sig_sigval}) che permette di restituire al gestore del segnale
 un valore numerico o un indirizzo,\footnote{per il suo uso si riveda la
   trattazione fatta in sez.~\ref{sec:sig_real_time} a proposito dei segnali
@@ -4129,7 +4129,7 @@ programma possa proseguire.
 La seconda variante di \func{sem\_wait} è una estensione specifica che può
 essere utilizzata soltanto se viene definita la macro \macro{\_XOPEN\_SOURCE}
 ad un valore di 600 prima di includere \headfile{semaphore.h}, la funzione è
-\func{sem\_timedwait}, ed il suo prototipo è:
+\funcd{sem\_timedwait}, ed il suo prototipo è:
 \begin{functions}
   \headdecl{semaphore.h} 
 
index 3899480..ab4f401 100644 (file)
--- a/macro.tex
+++ b/macro.tex
 \index{funzione!{#1}@{{\tt {#1}}}!definizione di}\texttt{#1}%
 %\index{#1@{{\tt {#1}} (funzione)}!definizione di}\texttt{#1}%
 }
+\newcommand{\funcm}[1]{%
+\index{funzione!{#1}@{{\tt {#1}}}!menzione di}\texttt{#1}%
+%\index{#1@{{\tt {#1}} (funzione)}!definizione di}\texttt{#1}%
+}
 
 \newcommand{\macro}[1]{%
 \index{macro!{#1}@{{\tt {#1}}}}\texttt{#1}%
index bbe39e4..d27a533 100644 (file)
@@ -611,7 +611,7 @@ quello di IPv6 sono le seguenti:
   frammentazione di pacchetti troppo grandi potrà essere gestita solo ai
   capi della comunicazione (usando un'apposita estensione vedi
   sez.~\ref{sec:IP_ipv6_extens}).
-\item IPv6 richiede il supporto per il \itindex{Maximum~Transfer~Unit}
+\item IPv6 richiede il supporto per il \itindex{Maximum~Transfer~Unit~(MTU)}
   \textit{path MTU discovery} (cioè il protocollo per la selezione della
   massima lunghezza del pacchetto); seppure questo sia in teoria opzionale,
   senza di esso non sarà possibile inviare pacchetti più larghi della
index 1452d1b..d996837 100644 (file)
@@ -647,8 +647,8 @@ minuti.
 Inoltre, per tenere conto delle diverse condizioni in cui può trovarsi la
 linea di comunicazione, TCP comprende anche un algoritmo di calcolo dinamico
 del tempo di andata e ritorno dei pacchetti fra un client e un server (il
-cosiddetto RTT, \itindex{Round~Trip~Time} \textit{Round Trip Time}), che lo
-rende in grado di adattarsi alle condizioni della rete per non generare
+cosiddetto RTT, \itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time}), che
+lo rende in grado di adattarsi alle condizioni della rete per non generare
 inutili ritrasmissioni o cadere facilmente in timeout.
 
 Inoltre TCP è in grado di preservare l'ordine dei dati assegnando un numero di
@@ -708,14 +708,14 @@ alle eventuali implicazioni che possono avere, è il seguente:
   dell'header è fissa e di 40 byte e non è compresa nel valore indicato dal
   suddetto campo. Inoltre IPv6 ha la possibilità di estendere la dimensione di
   un pacchetto usando la \textit{jumbo payload option}.
-\item Molte reti fisiche hanno una MTU \itindex{Maximum~Transfer~Unit}
+\item Molte reti fisiche hanno una MTU \itindex{Maximum~Transfer~Unit~(MTU)}
   (\textit{Maximum Transfer Unit}) che dipende dal protocollo specifico usato
   al livello di connessione fisica. Il più comune è quello di ethernet che è
   pari a 1500 byte, una serie di altri valori possibili sono riportati in
   tab.~\ref{tab:net_mtu_values}.
 \end{itemize}
 
-\itindbeg{Maximum~Transfer~Unit}
+\itindbeg{Maximum~Transfer~Unit~(MTU)}
 Quando un pacchetto IP viene inviato su una interfaccia di rete e le sue
 dimensioni eccedono la MTU viene eseguita la cosiddetta
 \textit{frammentazione}, i pacchetti cioè vengono suddivisi\footnote{questo
@@ -782,15 +782,15 @@ opzionale, mentre diventa obbligatorio per IPv6.  Per IPv6 infatti, non
 potendo i router frammentare i pacchetti, è necessario, per poter comunicare,
 conoscere da subito il \textit{path MTU}.
 
-Infine TCP definisce una \itindex{Maximum~Segment~Size} \textit{Maximum
-  Segment Size} (da qui in avanti abbreviata in MSS) che annuncia all'altro
-capo della connessione la dimensione massima dimensione del segmento di dati
-che può essere ricevuto, così da evitare la frammentazione. Di norma viene
-impostato alla dimensione della MTU dell'interfaccia meno la lunghezza delle
-intestazioni di IP e TCP, in Linux il default, mantenuto nella costante
-\const{TCP\_MSS} è 512.
+Infine il TCP definisce una \itindex{Maximum~Segment~Size~(MSS)}
+\textit{Maximum Segment Size} (da qui in avanti abbreviata in MSS) che
+annuncia all'altro capo della connessione la dimensione massima dimensione del
+segmento di dati che può essere ricevuto, così da evitare la
+frammentazione. Di norma viene impostato alla dimensione della MTU
+dell'interfaccia meno la lunghezza delle intestazioni di IP e TCP, in Linux il
+default, mantenuto nella costante \const{TCP\_MSS} è 512.
 
-\itindend{Maximum~Transfer~Unit}
+\itindend{Maximum~Transfer~Unit~(MTU)}
 
 
 %%% Local Variables: 
index 45e20c3..f04d9ae 100644 (file)
@@ -70,8 +70,8 @@ fig.~\ref{fig:UDP_packet-exchange}.
 
 Come illustrato in fig.~\ref{fig:UDP_packet-exchange} la struttura generica di
 un server UDP prevede, una volta creato il socket, la chiamata a \func{bind}
-per mettersi in ascolto dei dati. Questa è l'unica parte comune con un server
-TCP: non essendovi il concetto di connessione le funzioni \func{listen} ed
+per mettersi in ascolto dei dati, questa è l'unica parte comune con un server
+TCP. Non essendovi il concetto di connessione le funzioni \func{listen} ed
 \func{accept} non sono mai utilizzate nel caso di server UDP. La ricezione dei
 dati dal client avviene attraverso la funzione \func{recvfrom}, mentre una
 eventuale risposta sarà inviata con la funzione \func{sendto}.
@@ -231,7 +231,7 @@ suo prototipo\footnote{il prototipo è quello delle \acr{glibc} che seguono le
   \funcdecl{ssize\_t recvfrom(int sockfd, const void *buf, size\_t len, int
     flags, const struct sockaddr *from, socklen\_t *fromlen)}
   
-  Riceve un messaggio ad un socket.
+  Riceve un messaggio da un socket.
   
   \bodydesc{La funzione restituisce il numero di byte ricevuti in caso di
     successo e -1 in caso di errore; nel qual caso \var{errno} assumerà il
index 9f52a42..5e30c7a 100644 (file)
@@ -84,11 +84,11 @@ di \cmd{ld.so} e per un approfondimento dell'argomento si può consultare
 sez.~3.1.2 di \cite{AGL}.
 
 Una volta completate le operazioni di inizializzazione di \cmd{ld-linux.so}, il
-sistema fa partire qualunque programma chiamando la funzione \func{main}. Sta
+sistema fa partire qualunque programma chiamando la funzione \code{main}. Sta
 al programmatore chiamare così la funzione principale del programma da cui si
 suppone che inizi l'esecuzione. In ogni caso senza questa funzione lo stesso
 \textit{link-loader} darebbe luogo ad errori.  Lo standard ISO C specifica che
-la funzione \func{main} può non avere argomenti o prendere due argomenti che
+la funzione \code{main} può non avere argomenti o prendere due argomenti che
 rappresentano gli argomenti passati da linea di comando (su cui torneremo in
 sez.~\ref{sec:proc_par_format}), in sostanza un prototipo che va sempre bene è
 il seguente:
@@ -97,7 +97,7 @@ il seguente:
 \itindend{link-loader}
 
 In realtà nei sistemi Unix esiste un altro modo per definire la funzione
-\func{main}, che prevede la presenza di un terzo argomento, \code{char
+\code{main}, che prevede la presenza di un terzo argomento, \code{char
   *envp[]}, che fornisce l'\textsl{ambiente} del programma; questa forma però
 non è prevista dallo standard POSIX.1 per cui se si vogliono scrivere
 programmi portabili è meglio evitarla. Per accedere all'ambiente, come vedremo
@@ -105,9 +105,9 @@ in sez.~\ref{sec:proc_environ} si usa in genere una variabile globale che
 viene sempre definita automaticamente.
 
 Ogni programma viene fatto partire mettendo in esecuzione il codice contenuto
-nella funzione \func{main}, ogni altra funzione usata dal programma, che sia
+nella funzione \code{main}, ogni altra funzione usata dal programma, che sia
 ottenuta da una libreria condivisa, o che sia direttamente definita nel
-codice, dovrà essere invocata a partire dal codice di \func{main}. Nel caso di
+codice, dovrà essere invocata a partire dal codice di \code{main}. Nel caso di
 funzioni definite nel programma occorre tenere conto che, nel momento stesso
 in cui si usano le librerie di sistema (vale a dire la \acr{glibc}) alcuni
 nomi sono riservati e non possono essere utilizzati. 
@@ -359,11 +359,11 @@ direttamente valori numerici.
 \label{sec:proc_conclusion}
 
 Normalmente un programma conclude la sua esecuzione quando si fa ritornare la
-funzione \func{main}, si usa cioè l'istruzione \instruction{return} del
+funzione \code{main}, si usa cioè l'istruzione \instruction{return} del
 linguaggio C all'interno della stessa, o se si richiede esplicitamente la
 chiusura invocando direttamente la funzione \func{exit}. Queste due modalità
 sono assolutamente equivalenti, dato che \func{exit} viene chiamata in maniera
-trasparente anche quando \func{main} ritorna, passandogli come argomento il
+trasparente anche quando \code{main} ritorna, passandogli come argomento il
 valore di ritorno (che essendo .
 
 La funzione \funcd{exit}, che è completamente generale, essendo definita dallo
@@ -389,18 +389,18 @@ vedremo a breve) che completa la terminazione del processo.
 
 \itindbeg{exit~status}
 
-Il valore dell'argomento \param{status} o il valore di ritorno di \func{main},
+Il valore dell'argomento \param{status} o il valore di ritorno di \code{main},
 costituisce quello che viene chiamato lo \textsl{stato di uscita}
 (l'\textit{exit status}) del processo. In generale si usa questo valore per
 fornire al processo padre (come vedremo in sez.~\ref{sec:proc_wait}) delle
 informazioni generiche sulla riuscita o il fallimento del programma appena
 terminato.
 
-Anche se l'argomento \param{status} (ed il valore di ritorno di \func{main})
+Anche se l'argomento \param{status} (ed il valore di ritorno di \code{main})
 sono numeri interi di tipo \ctyp{int}, si deve tener presente che il valore
 dello stato di uscita viene comunque troncato ad 8 bit,
 per cui deve essere sempre compreso fra 0 e 255. Si tenga presente che se si
-raggiunge la fine della funzione \func{main} senza ritornare esplicitamente si
+raggiunge la fine della funzione \code{main} senza ritornare esplicitamente si
 ha un valore di uscita indefinito, è pertanto consigliabile di concludere
 sempre in maniera esplicita detta funzione.
 
@@ -483,7 +483,7 @@ programma,\footnote{nel caso di \func{atexit} lo standard POSIX.1-2001
   richiede che siano registrabili almeno \const{ATEXIT\_MAX} funzioni (il
   valore può essere ottenuto con \func{sysconf}, vedi
   sez.~\ref{sec:sys_sysconf}).} sia per la chiamata ad \func{exit} che per il
-ritorno di \func{main}. La prima funzione che si può utilizzare a tal fine è
+ritorno di \code{main}. La prima funzione che si può utilizzare a tal fine è
 \funcd{atexit}, il cui prototipo è:
 
 \begin{funcproto}{ \fhead{stdlib.h} \fdecl{void (*function)(void)}
@@ -563,7 +563,7 @@ Allo stesso modo l'unico modo in cui un programma può concludere
 volontariamente la propria esecuzione è attraverso una chiamata alla
 \textit{system call} \func{\_exit}, sia che questa venga fatta esplicitamente,
 o in maniera indiretta attraverso l'uso di \func{exit} o il ritorno di
-\func{main}. 
+\code{main}. 
 
 Uno schema riassuntivo che illustra le modalità con cui si avvia e conclude
 normalmente un programma è riportato in fig.~\ref{fig:proc_prog_start_stop}.
@@ -931,8 +931,8 @@ semplicemente allocati \param{size} byte e l'area di memoria non viene
 inizializzata.
 
 Una volta che non sia più necessaria la memoria allocata dinamicamente deve
-essere esplicitamente rilasciata usando la funzione \func{free},\footnote{le
-  glibc provvedono anche una funzione \func{cfree} definita per compatibilità
+essere esplicitamente rilasciata usando la funzione \funcd{free},\footnote{le
+  glibc provvedono anche una funzione \funcm{cfree} definita per compatibilità
   con SunOS, che è deprecata.} il suo prototipo è:
 
 \begin{funcproto}{ 
@@ -1693,7 +1693,7 @@ operazioni.
 Tutti i programmi hanno la possibilità di ricevere argomenti e opzioni quando
 vengono lanciati e come accennato in sez.~\ref{sec:proc_main} questo viene
 effettuato attraverso gli argomenti \param{argc} e \param{argv} ricevuti nella
-funzione \func{main} all'avvio del programma. Questi argomenti vengono passati
+funzione \code{main} all'avvio del programma. Questi argomenti vengono passati
 al programma dalla shell o dal processo che esegue la \func{exec} (secondo le
 modalità che vedremo in sez.~\ref{sec:proc_exec}) quando questo viene messo in
 esecuzione.
@@ -1780,7 +1780,7 @@ in \param{argv} la libreria standard del C fornisce la funzione
 \fhead{unistd.h} 
 \fdecl{int getopt(int argc, char * const argv[], const char *optstring)}
 \fdesc{Esegue la scansione delle opzioni negli argomenti della funzione
-  \func{main}.} 
+  \code{main}.} 
 }
 {Ritorna il carattere che segue l'opzione, ``\texttt{:}'' se manca un
   parametro all'opzione, ``\texttt{?}'' se l'opzione è sconosciuta, e $-1$ se
@@ -1788,7 +1788,7 @@ in \param{argv} la libreria standard del C fornisce la funzione
 \end{funcproto}
 
 Questa funzione prende come argomenti le due variabili \param{argc} e
-\param{argv} che devono essere quelle passate come argomenti di \func{main}
+\param{argv} che devono essere quelle passate come argomenti di \code{main}
 all'esecuzione del programma, ed una stringa \param{optstring} che indica
 quali sono le opzioni valide. La funzione effettua la scansione della lista
 degli argomenti ricercando ogni stringa che comincia con il carattere
index cb4c115..985a6af 100644 (file)
@@ -668,7 +668,7 @@ una \func{fork} invece sono:\footnote{a parte le ultime quattro, relative a
 \end{itemize*}
 
 Una seconda funzione storica usata per la creazione di un nuovo processo è
-\func{vfork}, che è esattamente identica a \func{fork} ed ha la stessa
+\funcm{vfork}, che è esattamente identica a \func{fork} ed ha la stessa
 semantica e gli stessi errori; la sola differenza è che non viene creata la
 tabella delle pagine né la struttura dei task per il nuovo processo. Il
 processo padre è posto in attesa fintanto che il figlio non ha eseguito una
@@ -700,7 +700,7 @@ di vista di come il sistema gestisce la conclusione dei processi.
 Abbiamo visto in sez.~\ref{sec:proc_conclusion} le tre modalità con cui un
 programma viene terminato in maniera normale: la chiamata di \func{exit}, che
 esegue le funzioni registrate per l'uscita e chiude gli \textit{stream} e poi
-esegue \func{\_exit}, il ritorno dalla funzione \func{main} equivalente alla
+esegue \func{\_exit}, il ritorno dalla funzione \code{main} equivalente alla
 chiamata di \func{exit}, e la chiamata diretta a \func{\_exit}, che passa
 direttamente alle operazioni di terminazione del processo da parte del kernel.
 
@@ -746,7 +746,7 @@ Nel caso di conclusione normale, abbiamo visto in
 sez.~\ref{sec:proc_conclusion} che lo stato di uscita del processo viene
 caratterizzato tramite il valore del cosiddetto \textit{exit status}, cioè il
 valore passato come argomento alle funzioni \func{exit} o \func{\_exit} o il
-valore di ritorno per \func{main}.  Ma se il processo viene concluso in
+valore di ritorno per \code{main}.  Ma se il processo viene concluso in
 maniera anomala il programma non può specificare nessun \textit{exit status},
 ed è il kernel che deve generare autonomamente il \textit{termination status}
 per indicare le ragioni della conclusione anomala.
@@ -1146,7 +1146,7 @@ anomala), uno per indicare se è stato generato un \itindex{core~dump}
                                       significativi dello stato di uscita del
                                       processo (passato attraverso
                                       \func{\_exit}, \func{exit} o come valore
-                                      di ritorno di \func{main}); può essere
+                                      di ritorno di \code{main}); può essere
                                       valutata solo se \val{WIFEXITED} ha
                                       restituito un valore non nullo.\\ 
     \macro{WIFSIGNALED}\texttt{(s)} & Condizione vera se il processo figlio è
@@ -1419,7 +1419,7 @@ La funzione \func{execve} esegue il programma o lo script indicato dal
 da \param{argv} e come ambiente la lista di stringhe indicata
 da \param{envp}. Entrambe le liste devono essere terminate da un puntatore
 nullo. I vettori degli argomenti e dell'ambiente possono essere acceduti dal
-nuovo programma quando la sua funzione \func{main} è dichiarata nella forma
+nuovo programma quando la sua funzione \code{main} è dichiarata nella forma
 \code{main(int argc, char *argv[], char *envp[])}. Si tenga presente per il
 passaggio degli argomenti e dell'ambiente esistono comunque dei limiti, su cui
 torneremo in sez.~\ref{sec:sys_res_limits}).
@@ -1487,7 +1487,7 @@ illustrata in fig.~\ref{fig:proc_exec_relat}.
 
 La prima differenza fra le funzioni riguarda le modalità di passaggio dei
 valori che poi andranno a costituire gli argomenti a linea di comando (cioè i
-valori di \param{argv} e \param{argc} visti dalla funzione \func{main} del
+valori di \param{argv} e \param{argc} visti dalla funzione \code{main} del
 programma chiamato). Queste modalità sono due e sono riassunte dagli mnemonici
 ``\texttt{v}'' e ``\texttt{l}'' che stanno rispettivamente per \textit{vector}
 e \textit{list}.
@@ -3758,7 +3758,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   impostato ad 1. Una volta abilitato il \itindex{secure~computing~mode}
   \textit{secure computing mode} il processo potrà utilizzare soltanto un
   insieme estremamente limitato di \textit{system call}: \func{read},
-  \func{write}, \func{\_exit} e \func{sigreturn}. Ogni altra \textit{system
+  \func{write}, \func{\_exit} e \funcm{sigreturn}. Ogni altra \textit{system
     call} porterà all'emissione di un \signal{SIGKILL} (vedi
   sez.~\ref{sec:sig_termination}).  Il \textit{secure computing mode} è stato
   ideato per fornire un supporto per l'esecuzione di codice esterno non fidato
@@ -3901,9 +3901,9 @@ processi, che poi è stata utilizzata anche per fornire supporto per le
 tecnologie di virtualizzazione dei processi (i cosiddetti \textit{container}).
 
 Per questo l'interfaccia per la creazione di un nuovo processo è stata
-delegata ad una nuova \textit{system call}, \func{sys\_clone}, che consente di
-reimplementare anche la tradizionale \func{fork}. In realtà in questo caso più
-che di nuovi processi si può parlare della creazioni di nuovi
+delegata ad una nuova \textit{system call}, \funcm{sys\_clone}, che consente
+di reimplementare anche la tradizionale \func{fork}. In realtà in questo caso
+più che di nuovi processi si può parlare della creazioni di nuovi
 ``\textit{task}'' del kernel che possono assumere la veste sia di un processo
 classico isolato dagli altri come quelli trattati finora, che di un
 \textit{thread} in cui la memoria viene condivisa fra il processo chiamante ed
@@ -4062,6 +4062,9 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
 \end{basedescript}
 
 
+%TODO trattare unshare
+
+
 \subsection{La funzione \func{ptrace}}
 \label{sec:process_ptrace}
 
index cf880e5..a4dad38 100644 (file)
@@ -570,7 +570,7 @@ inoltre effettuerà, qualora servano, ulteriori impostazioni.\footnote{ad
 poi porsi in attesa dell'immissione del nome di un utente.
 
 Una volta che si sia immesso il nome di login \cmd{getty} esegue direttamente
-il programma \cmd{login} con una \func{exevle}, passando come argomento la
+il programma \cmd{login} con una \func{execle}, passando come argomento la
 stringa con il nome, ed un ambiente opportunamente costruito che contenga
 quanto necessario; ad esempio di solito viene opportunamente inizializzata la
 variabile di ambiente \envvar{TERM} per identificare il terminale su cui si
@@ -980,7 +980,7 @@ tab.~\ref{tab:sess_syslog_facility}, uno dei possibili utenti del servizio del
 \textit{syslog} è anche il kernel, che a sua volta può avere necessità di
 inviare messaggi verso l'\textit{user space}. I messaggi del kernel sono
 mantenuti in un apposito buffer circolare e generati all'interno del kernel
-tramite la funzione \func{printk}, analoga alla \func{printf} usata in
+tramite la funzione \texttt{printk}, analoga alla \func{printf} usata in
 \textit{user space}.\footnote{una trattazione eccellente dell'argomento si
   trova nel quarto capitolo di \cite{LinDevDri}.}
 
@@ -1004,13 +1004,13 @@ sono riportati in fig.~\ref{fig:printk_priority}
   \label{fig:printk_priority}
 \end{figure}
 
-Dato che i messaggi generati da \func{printk} hanno un loro specifico formato
-tradizionalmente si usava un demone ausiliario, \cmd{klogd}, per leggerli,
-rimappare le priorità sui valori di tab.~\ref{tab:sess_syslog_priority} e
-inviarli al sistema del \textit{syslog} nella facility \const{LOG\_KERN}.
-Oggi i nuovi demoni più avanzati che realizzano il servizio (come
-\texttt{rsyslog} o \texttt{syslog-ng}) sono in grado di fare tutto questo da
-soli.
+Dato che i messaggi generati da \texttt{printk} hanno un loro specifico
+formato tradizionalmente si usava un demone ausiliario, \cmd{klogd}, per
+leggerli, rimappare le priorità sui valori di
+tab.~\ref{tab:sess_syslog_priority} e inviarli al sistema del \textit{syslog}
+nella facility \const{LOG\_KERN}.  Oggi i nuovi demoni più avanzati che
+realizzano il servizio (come \texttt{rsyslog} o \texttt{syslog-ng}) sono in
+grado di fare tutto questo da soli.
 
 Ma i messaggi del kernel non sono necessariamente connessi al sistema del
 \textit{syslog}; ad esempio possono anche essere letti direttamente dal buffer
@@ -1057,7 +1057,7 @@ Gestisce i messaggi di log del kernel.
   \item[\errcode{ERESTARTSYS}] l'operazione è stata interrotta da un segnale.
   \item[\errcode{EPERM}] non si hanno i privilegi richiesti per l'operazione
     richiesta.
-  \item[\errcode{ENOSYS}] il supporto per \func{printk} non è stato compilato
+  \item[\errcode{ENOSYS}] il supporto per \texttt{printk} non è stato compilato
     nel kernel.
   \end{errlist}
   ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
@@ -2382,7 +2382,7 @@ Qui vanno le cose su \func{openpty} e compagnia.
 % LocalWords:  NOCTTY TIOCSCTTY error tcsetpgrp termios fd pgrpid descriptor VT
 % LocalWords:  ENOTTY ENOSYS EBADF SIGTTIN SIGTTOU EIO tcgetpgrp crypt SIGTSTP
 % LocalWords:  SIGINT SIGQUIT SIGTERM SIGHUP hungup kill orphaned SIGCONT exit
-% LocalWords:  init Slackware run level inittab fig device getty exevle TERM at
+% LocalWords:  init Slackware run level inittab fig device getty TERM at
 % LocalWords:  getpwnam chdir home chown chmod setuid setgid initgroups SIGCHLD
 % LocalWords:  daemon like daemons NdT Stevens Programming FAQ filesystem umask
 % LocalWords:  noclose syslog syslogd socket UDP klogd printk printf facility
index 75bcbac..ae4c057 100644 (file)
@@ -946,7 +946,7 @@ e bloccando il segnale durante l'esecuzione dello stesso. Con l'utilizzo delle
 \acr{glibc} dalla versione 2 anche Linux è passato a questo comportamento.  Il
 comportamento della versione originale della funzione, il cui uso è deprecato
 per i motivi visti in sez.~\ref{sec:sig_semantics}, può essere ottenuto
-chiamando \func{sysv\_signal}, una volta che si sia definita la macro
+chiamando \funcm{sysv\_signal}, una volta che si sia definita la macro
 \macro{\_XOPEN\_SOURCE}.  In generale, per evitare questi problemi, l'uso di
 \func{signal}, che tra l'altro ha un comportamento indefinito in caso di
 processo \itindex{thread} multi-\textit{thread}, è da evitare; tutti i nuovi
@@ -2263,7 +2263,7 @@ lista riportata in fig.~\ref{fig:sig_safe_functions}.
     \func{getsockname}, \func{getsockopt}, \func{getuid}, \func{kill},
     \func{link}, \func{listen}, \func{lseek}, \func{lstat}, \func{mkdir},
     \func{mkfifo}, \func{open}, \func{pathconf}, \func{pause}, \func{pipe},
-    \func{poll}, \func{posix\_trace\_event}, \func{pselect}, \func{raise},
+    \func{poll}, \funcm{posix\_trace\_event}, \func{pselect}, \func{raise},
     \func{read}, \func{readlink}, \func{recv}, \func{recvfrom},
     \func{recvmsg}, \func{rename}, \func{rmdir}, \func{select},
     \func{sem\_post}, \func{send}, \func{sendmsg}, \func{sendto},
@@ -2271,7 +2271,7 @@ lista riportata in fig.~\ref{fig:sig_safe_functions}.
     \func{setuid}, \func{shutdown}, \func{sigaction}, \func{sigaddset},
     \func{sigdelset}, \func{sigemptyset}, \func{sigfillset},
     \func{sigismember}, \func{signal}, \func{sigpause}, \func{sigpending},
-    \func{sigprocmask}, \func{sigqueue}, \func{sigset}, \func{sigsuspend},
+    \func{sigprocmask}, \func{sigqueue}, \funcm{sigset}, \func{sigsuspend},
     \func{sleep}, \func{socket}, \func{socketpair}, \func{stat},
     \func{symlink}, \func{sysconf}, \func{tcdrain}, \func{tcflow},
     \func{tcflush}, \func{tcgetattr}, \func{tcgetgrp}, \func{tcsendbreak},
@@ -2441,7 +2441,7 @@ Questo è una \direct{union} di tipo \struct{sigval} (la sua definizione è in
 fig.~\ref{fig:sig_sigval}) in cui può essere memorizzato o un valore numerico,
 se usata nella forma \var{sival\_int}, o un indirizzo, se usata nella forma
 \var{sival\_ptr}. L'unione viene usata dai segnali \textit{real-time} e da
-vari meccanismi di notifica\footnote{un campo di tipo \struct{sigval\_t} è
+vari meccanismi di notifica\footnote{un campo di tipo \type{sigval\_t} è
   presente anche nella struttura \struct{sigevent} (definita in
   fig.~\ref{fig:struct_sigevent}) che viene usata dai meccanismi di notifica
   come quelli per i timer POSIX (vedi sez.~\ref{sec:sig_timer_adv}), l'I/O
index 3a2afa7..9bc9336 100644 (file)
@@ -118,7 +118,7 @@ problema dell'ordine in cui questi vengono interrogati.\footnote{con le
   predefinito e non modificabile (a meno di una ricompilazione delle librerie
   stesse).}
 
-\itindbeg{Name~Service~Switch}
+\itindbeg{Name~Service~Switch~(NSS)}
 Per risolvere questa serie di problemi la risoluzione dei nomi a dominio
 eseguirà dal \textit{resolver} è stata inclusa all'interno di un meccanismo
 generico per la risoluzione di corrispondenze fra nomi ed informazioni ad essi
@@ -200,7 +200,7 @@ quello che conta sono le funzioni classiche che il \textit{resolver} mette a
 disposizione,\footnote{è cura della implementazione fattane nelle \acr{glibc}
   tenere conto della presenza del \textit{Name Service Switch}.} e sono queste
 quelle che tratteremo nelle sezioni successive.
-\itindend{Name~Service~Switch}
+\itindend{Name~Service~Switch~(NSS)}
 
 
 \subsection{Le funzioni di interrogazione del \textit{resolver}}
@@ -875,6 +875,7 @@ Disattiva l'uso di connessioni per le interrogazioni ad un server DNS.
 \noindent e come si può vedere la funzione è estremamente semplice, non
 richiedendo nessun argomento.
 
+% TODO manca gethostent (e gethostent_r) e altro ? (vedi man page)
 
 Infine si può richiedere la risoluzione inversa di un indirizzo IP od IPv6,
 per ottenerne il nome a dominio ad esso associato, per fare questo si può
@@ -1019,7 +1020,7 @@ servizi di risoluzione dei nomi illustrati in sez.~\ref{sec:sock_resolver}; in
 generale infatti ci sono una serie di funzioni nella forma
 \texttt{getXXXbyname} e \texttt{getXXXbyaddr} (dove \texttt{XXX} indica il
 servizio) per ciascuna delle informazioni di rete mantenute dal
-\itindex{Name~Service~Switch} \textit{Name Service Switch} che permettono
+\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che permettono
 rispettivamente di trovare una corrispondenza cercando per nome o per numero.
 
 L'elenco di queste funzioni è riportato nelle colonne finali di
@@ -1027,8 +1028,8 @@ tab.~\ref{tab:name_resolution_functions}, dove le si sono suddivise rispetto
 al tipo di informazione che forniscono (riportato in prima colonna). Nella
 tabella si è anche riportato il file su cui vengono ordinariamente mantenute
 queste informazioni, che però può essere sostituito da un qualunque supporto
-interno al \itindex{Name~Service~Switch} \textit{Name Service Switch} (anche
-se usualmente questo avviene solo per la risoluzione degli indirizzi).
+interno al \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}
+(anche se usualmente questo avviene solo per la risoluzione degli indirizzi).
 Ciascuna funzione fa riferimento ad una sua apposita struttura che contiene i
 relativi dati, riportata in terza colonna.
 
@@ -1044,15 +1045,15 @@ relativi dati, riportata in terza colonna.
     indirizzo &\conffile{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
                \func{gethostbyaddr}\\ 
     servizio  &\conffile{/etc/services}&\struct{servent}&\func{getservbyname}&
-               \func{getservbyaddr}\\ 
-    rete      &\conffile{/etc/networks}&\struct{netent}&\func{getnetbyname}&
-               \func{getnetbyaddr}\\ 
+               \func{getservbyport}\\ 
+    rete      &\conffile{/etc/networks}&\struct{netent}&\funcm{getnetbyname}&
+               \funcm{getnetbyaddr}\\ 
     protocollo&\conffile{/etc/protocols}&\struct{protoent}&
-               \func{getprotobyname}&\func{getprotobyaddr}\\ 
+               \funcm{getprotobyname}&\funcm{getprotobyaddr}\\ 
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
-    \itindex{Name~Service~Switch} \textit{Name Service Switch}.}
+    \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.}
   \label{tab:name_resolution_functions}
 \end{table}
 
@@ -1060,13 +1061,13 @@ Delle funzioni di tab.~\ref{tab:name_resolution_functions} abbiamo trattato
 finora soltanto quelle relative alla risoluzione dei nomi, dato che sono le
 più usate, e prevedono praticamente da sempre la necessità di rivolgersi ad
 una entità esterna; per le altre invece, estensioni fornite dal
-\itindex{Name~Service~Switch} NSS a parte, si fa sempre riferimento ai dati
-mantenuti nei rispettivi file.
+\itindex{Name~Service~Switch~(NSS)} NSS a parte, si fa sempre riferimento ai
+dati mantenuti nei rispettivi file.
 
 Dopo la risoluzione dei nomi a dominio una delle ricerche più comuni è quella
 sui nomi dei servizi di rete più comuni (cioè \texttt{http}, \texttt{smtp},
 ecc.) da associare alle rispettive porte. Le due funzioni da utilizzare per
-questo sono \funcd{getservbyname} e \funcd{getservbyaddr}, che permettono
+questo sono \funcd{getservbyname} e \funcd{getservbyport}, che permettono
 rispettivamente di ottenere il numero di porta associato ad un servizio dato
 il nome e viceversa; i loro prototipi sono:
 \begin{functions}
@@ -1096,7 +1097,7 @@ Il primo argomento è il nome del servizio per \func{getservbyname},
 specificato tramite la stringa \param{name}, mentre \func{getservbyport}
 richiede il numero di porta in \param{port}. Entrambe le funzioni eseguono una
 ricerca sul file \conffile{/etc/services}\footnote{il
-  \itindex{Name~Service~Switch} \textit{Name Service Switch} astrae il
+  \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} astrae il
   concetto a qualunque supporto su cui si possano mantenere i suddetti dati.}
 ed estraggono i dati dalla prima riga che corrisponde agli argomenti
 specificati; se la risoluzione ha successo viene restituito un puntatore ad
@@ -1131,7 +1132,7 @@ trovati nelle rispettive pagine di manuale.
 
 Oltre alle funzioni di ricerca esistono delle ulteriori funzioni che prevedono
 una lettura sequenziale delle informazioni mantenute nel
-\itindex{Name~Service~Switch} \textit{Name Service Switch} (in sostanza
+\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} (in sostanza
 permettono di leggere i file contenenti le informazioni riga per riga), che
 sono analoghe a quelle elencate in tab.~\ref{tab:sys_passwd_func} per le
 informazioni relative ai dati degli utenti e dei gruppi. Nel caso specifico
@@ -1163,7 +1164,7 @@ voce. La seconda funzione, \func{setservent}, permette di aprire il file
 aperto riporta la posizione di lettura alla prima voce del file, in questo
 modo si può far ricominciare da capo una lettura sequenziale. L'argomento
 \param{stayopen}, se diverso da zero, fa sì che il file resti aperto anche fra
-diverse chiamate a \func{getservbyname} e \func{getservbyaddr}.\footnote{di
+diverse chiamate a \func{getservbyname} e \func{getservbyport}.\footnote{di
   default dopo una chiamata a queste funzioni il file viene chiuso, cosicché
   una successiva chiamata a \func{getservent} riparte dall'inizio.}  La terza
 funzione, \funcd{endservent}, provvede semplicemente a chiudere il file.
@@ -1188,12 +1189,12 @@ rimandando alle rispettive pagine di manuale.
     \hline
     indirizzo &\func{sethostent} &\func{gethostent} &\func{endhostent} \\
     servizio  &\func{setservent} &\func{getservent} &\func{endservent}\\ 
-    rete      &\func{setnetent}  &\func{getnetent}  &\func{endnetent}\\ 
-    protocollo&\func{setprotoent}&\func{getprotoent}&\func{endprotoent}\\ 
+    rete      &\funcm{setnetent}  &\funcm{getnetent}  &\funcm{endnetent}\\ 
+    protocollo&\funcm{setprotoent}&\funcm{getprotoent}&\funcm{endprotoent}\\ 
     \hline
   \end{tabular}
   \caption{Funzioni lettura sequenziale dei dati del
-    \itindex{Name~Service~Switch} \textit{Name Service Switch}.} 
+    \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.} 
   \label{tab:name_sequential_read}
 \end{table}
 
@@ -1445,7 +1446,7 @@ corrispondente è riportato tramite \var{errno}.
 Come per i codici di errore di \func{gethostbyname} anche in questo caso è
 fornita una apposita funzione, analoga di \func{strerror}, che consente di
 utilizzarli direttamente per stampare a video un messaggio esplicativo; la
-funzione è \func{gai\_strerror} ed il suo prototipo è:
+funzione è \funcd{gai\_strerror} ed il suo prototipo è:
 \begin{functions}
   \headdecl{netdb.h} 
 
@@ -1603,7 +1604,7 @@ struttura \struct{addrinfo}, perché una volta disallocati i dati con
 Anche la nuova interfaccia definita da POSIX prevede una nuova funzione per
 eseguire la risoluzione inversa e determinare nomi di servizi e di dominio
 dati i rispettivi valori numerici. La funzione che sostituisce le varie
-\func{gethostbyname}, \func{getipnodebyname} e \func{getservname} è
+\func{gethostbyname}, \func{getipnodebyname} e \func{getservbyname} è
 \funcd{getnameinfo}, ed il suo prototipo è:
 \begin{functions}
   \headdecl{sys/socket.h}
@@ -1687,8 +1688,8 @@ finora, quello in cui si specifica nel client un indirizzo remoto per la
 connessione al server, e quello in cui si specifica nel server un indirizzo
 locale su cui porsi in ascolto.
 
-La prima funzione della nostra interfaccia semplificata è \func{sockconn} che
-permette di ottenere un socket, connesso all'indirizzo ed al servizio
+La prima funzione della nostra interfaccia semplificata è \texttt{sockconn}
+che permette di ottenere un socket, connesso all'indirizzo ed al servizio
 specificati. Il corpo della funzione è riportato in
 fig.~\ref{fig:sockconn_code}, il codice completo è nel file \file{SockUtil.c}
 dei sorgenti allegati alla guida, che contiene varie funzioni di utilità per
@@ -1700,7 +1701,7 @@ l'uso dei socket.
     \includecodesample{listati/sockconn.c}
   \end{minipage}
   \normalsize
-  \caption{Il codice della funzione \func{sockconn}.}
+  \caption{Il codice della funzione \texttt{sockconn}.}
   \label{fig:sockconn_code}
 \end{figure}
 
@@ -1771,7 +1772,7 @@ codice usato finora per collegarsi (vedi fig.~\ref{fig:TCP_echo_client_1})
 avremo una semplificazione per cui il corpo principale del nostro client
 diventerà quello illustrato in fig.~\ref{fig:TCP_echo_fifth}, in cui le
 chiamate a \func{socket}, \func{inet\_pton} e \func{connect} sono sostituite
-da una singola chiamata a \func{sockconn}. Inoltre il nuovo client (il cui
+da una singola chiamata a \texttt{sockconn}. Inoltre il nuovo client (il cui
 codice completo è nel file \file{TCP\_echo\_fifth.c} dei sorgenti allegati)
 consente di utilizzare come argomento del programma un nome a dominio al posto
 dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6.
@@ -1782,14 +1783,14 @@ dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6.
     \includecodesample{listati/sockbind.c}
   \end{minipage}
   \normalsize
-  \caption{Il codice della funzione \func{sockbind}.}
+  \caption{Il codice della funzione \texttt{sockbind}.}
   \label{fig:sockbind_code}
 \end{figure}
 
-La seconda funzione di ausilio è \func{sockbind}, il cui corpo principale è
+La seconda funzione di ausilio è \texttt{sockbind}, il cui corpo principale è
 riportato in fig.~\ref{fig:sockbind_code} (al solito il sorgente completo è
 nel file \file{sockbind.c} dei sorgenti allegati alla guida). Come si può
-notare la funzione è del tutto analoga alla precedente \func{sockconn}, e
+notare la funzione è del tutto analoga alla precedente \texttt{sockconn}, e
 prende gli stessi argomenti, però invece di eseguire una connessione con
 \func{connect} si limita a chiamare \func{bind} per collegare il socket ad una
 porta.
@@ -1806,16 +1807,16 @@ passare un valore \val{NULL} come valore per l'argomento \var{host}; l'uso
 del valore \const{AI\_PASSIVE} serve ad ottenere il valore generico nella
 rispettiva struttura degli indirizzi.
 
-Come già detto la funzione è analoga a \func{sockconn} ed inizia azzerando ed
-inizializzando (\texttt{\small 6-11}) opportunamente la struttura \var{hint}
-con i valori ricevuti come argomenti, soltanto che in questo caso si è usata
-(\texttt{\small 8}) una impostazione specifica dei flag di \var{hint} usando
-\const{AI\_PASSIVE} per indicare che il socket sarà usato per una apertura
-passiva. Per il resto la chiamata (\texttt{\small 12-18}) a \func{getaddrinfo}
-e ed il ciclo principale (\texttt{\small 20--42}) sono identici, solo che si è
-sostituita (\texttt{\small 31}) la chiamata a \func{connect} con una chiamata
-a \func{bind}. Anche la conclusione (\texttt{\small 43--44}) della funzione è
-identica. 
+Come già detto la funzione è analoga a \texttt{sockconn} ed inizia azzerando
+ed inizializzando (\texttt{\small 6-11}) opportunamente la struttura
+\var{hint} con i valori ricevuti come argomenti, soltanto che in questo caso
+si è usata (\texttt{\small 8}) una impostazione specifica dei flag di
+\var{hint} usando \const{AI\_PASSIVE} per indicare che il socket sarà usato
+per una apertura passiva. Per il resto la chiamata (\texttt{\small 12-18}) a
+\func{getaddrinfo} e ed il ciclo principale (\texttt{\small 20--42}) sono
+identici, solo che si è sostituita (\texttt{\small 31}) la chiamata a
+\func{connect} con una chiamata a \func{bind}. Anche la conclusione
+(\texttt{\small 43--44}) della funzione è identica.
 
 Si noti come anche in questo caso si siano inserite le stampe degli errori
 sullo standard error, nonostante la funzione possa essere invocata da un
@@ -1838,7 +1839,7 @@ Con l'uso di questa funzione si può modificare anche il codice del nostro
 server \textit{echo}, che rispetto a quanto illustrato nella versione iniziale
 di fig.~\ref{fig:TCP_echo_server_first_code} viene modificato nella forma
 riportata in fig.~\ref{fig:TCP_echod_third}. In questo caso il socket su cui
-porsi in ascolto viene ottenuto (\texttt{\small 15--18}) da \func{sockbind}
+porsi in ascolto viene ottenuto (\texttt{\small 15--18}) da \texttt{sockbind}
 che si cura anche della eventuale risoluzione di un indirizzo specifico sul
 quale si voglia far ascoltare il server.
 
@@ -2505,9 +2506,9 @@ eventuali pacchetti rimasti intrappolati in una precedente connessione possano
 finire fra quelli di una nuova.
 
 Come esempio di uso di questa connessione abbiamo predisposto una nuova
-versione della funzione \func{sockbind} (vedi fig.~\ref{fig:sockbind_code})
+versione della funzione \texttt{sockbind} (vedi fig.~\ref{fig:sockbind_code})
 che consenta l'impostazione di questa opzione. La nuova funzione è
-\func{sockbindopt}, e le principali differenze rispetto alla precedente sono
+\texttt{sockbindopt}, e le principali differenze rispetto alla precedente sono
 illustrate in fig.~\ref{fig:sockbindopt_code}, dove si sono riportate le
 sezioni di codice modificate rispetto alla versione precedente. Il codice
 completo della funzione si trova, insieme alle altre funzioni di servizio dei
@@ -2520,8 +2521,8 @@ guida.
     \includecodesample{listati/sockbindopt.c}
   \end{minipage}
   \normalsize
-  \caption{Le sezioni della funzione \func{sockbindopt} modificate rispetto al
-    codice della precedente \func{sockbind}.} 
+  \caption{Le sezioni della funzione \texttt{sockbindopt} modificate rispetto al
+    codice della precedente \texttt{sockbind}.} 
   \label{fig:sockbindopt_code}
 \end{figure}
 
@@ -2555,7 +2556,7 @@ valore, per cui in tal caso la successiva chiamata (\texttt{\small 13-17}) a
   \end{minipage}
   \normalsize
   \caption{Il nuovo codice per l'apertura passiva del server \textit{echo} che
-    usa la nuova funzione \func{sockbindopt}.}
+    usa la nuova funzione \texttt{sockbindopt}.}
   \label{fig:TCP_echod_fifth}
 \end{figure}
 
@@ -2772,9 +2773,9 @@ file.
     \const{IP\_RECVERR}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Abilita la gestione degli errori.\\
     \const{IP\_MTU\_DISCOVER}   &$\bullet$&$\bullet$&         &\texttt{int}& 
-      Imposta il Path MTU \itindex{Maximum~Transfer~Unit} Discovery.\\
+      Imposta il Path MTU \itindex{Maximum~Transfer~Unit~(MTU)} Discovery.\\
     \const{IP\_MTU}             &$\bullet$&         &         &\texttt{int}& 
-      Legge il valore attuale della \itindex{Maximum~Transfer~Unit} MTU.\\
+      Legge il valore attuale della \itindex{Maximum~Transfer~Unit~(MTU)} MTU.\\
     \const{IP\_ROUTER\_ALERT}   &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Imposta l'opzione \textit{IP router alert} sui pacchetti.\\
     \const{IP\_MULTICAST\_TTL}  &$\bullet$&$\bullet$&         &\texttt{int}& 
@@ -2946,7 +2947,7 @@ sez.~\ref{sec:net_sendmsg}).
   come valore logico e non è applicabile a socket di tipo
   \const{SOCK\_STREAM}.
 
-\itindbeg{Maximum~Transfer~Unit}
+\itindbeg{Maximum~Transfer~Unit~(MTU)}
 \item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel
   della serie 2.2.x, ed è specifica di Linux.  L'opzione permette di scrivere
   o leggere le impostazioni della modalità usata per la determinazione della
@@ -2984,12 +2985,11 @@ sez.~\ref{sec:net_sendmsg}).
   ricerca è disabilitata ed è responsabilità del programma creare pacchetti di
   dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se
   l'opzione viene abilitata, il kernel si incaricherà di tenere traccia
-  automaticamente della \itindex{Maximum~Transfer~Unit} \textit{Path MTU}
-  verso ciascuna destinazione, e rifiuterà immediatamente la trasmissione di
-  pacchetti di dimensioni maggiori della MTU con un errore di
-  \errval{EMSGSIZE}.\footnote{in caso contrario la trasmissione del pacchetto
-    sarebbe effettuata, ottenendo o un fallimento successivo della
-    trasmissione, o la frammentazione dello stesso.}
+  automaticamente della \textit{Path MTU} verso ciascuna destinazione, e
+  rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori
+  della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la
+    trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento
+    successivo della trasmissione, o la frammentazione dello stesso.}
 
 \item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
   di percorso del socket.  L'opzione richiede per \param{optval} un intero che
@@ -3003,15 +3003,15 @@ sez.~\ref{sec:net_sendmsg}).
   esplicitamente connesso con \func{connect}. 
 
   Ad esempio con i socket UDP si potrà ottenere una stima iniziale della
-  \itindex{Maximum~Transfer~Unit} \textit{Path MTU} eseguendo prima una
-  \func{connect} verso la destinazione, e poi usando \func{getsockopt} con
-  questa opzione. Si può anche avviare esplicitamente il procedimento di
-  scoperta inviando un pacchetto di grosse dimensioni (che verrà scartato) e
-  ripetendo l'invio coi dati aggiornati. Si tenga infine conto che durante il
-  procedimento i pacchetti iniziali possono essere perduti, ed è compito
-  dell'applicazione gestirne una eventuale ritrasmissione.
+  \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
+  e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
+  esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
+  dimensioni (che verrà scartato) e ripetendo l'invio coi dati aggiornati. Si
+  tenga infine conto che durante il procedimento i pacchetti iniziali possono
+  essere perduti, ed è compito dell'applicazione gestirne una eventuale
+  ritrasmissione.
 
-\itindend{Maximum~Transfer~Unit}
+\itindend{Maximum~Transfer~Unit~(MTU)}
 
 \item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i
   kernel della serie 2.2.x, ed è specifica di Linux. Prende per
@@ -3074,6 +3074,9 @@ sez.~\ref{sec:net_sendmsg}).
   del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture
   \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni.
 
+% TODO chiarire quale è la struttura \struct{ip\_mreq}
+
+
 \itindend{multicast}
 \end{basedescript}
 
@@ -3122,7 +3125,7 @@ strutture collegate all'uso delle opzioni TCP sono definite in
     \const{TCP\_NODELAY}      &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Spedisce immediatamente i dati in segmenti singoli.\\
     \const{TCP\_MAXSEG}       &$\bullet$&$\bullet$&         &\texttt{int}&
-      Valore della \itindex{Maximum~Segment~Size} MSS per i segmenti in
+      Valore della \itindex{Maximum~Segment~Size~(MSS)} MSS per i segmenti in
       uscita.\\  
     \const{TCP\_CORK}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
       Accumula i dati in un unico segmento.\\
@@ -3198,13 +3201,14 @@ quantità di dettagli è fornita nel seguente elenco:
     kernel 2.5.71.}
 
 \item[\const{TCP\_MAXSEG}] con questa opzione si legge o si imposta il valore
-  della \itindex{Maximum~Segment~Size} MSS (\textit{Maximum~Segment~Size},
-  vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:tcp_protocol_xxx}) dei
-  segmenti TCP uscenti. Se l'opzione è impostata prima di stabilire la
-  connessione, si cambia anche il valore della \itindex{Maximum~Segment~Size}
-  MSS annunciata all'altro capo della connessione. Se si specificano valori
-  maggiori della \itindex{Maximum~Transfer~Unit} MTU questi verranno ignorati,
-  inoltre TCP imporrà anche i suoi limiti massimo e minimo per questo valore.
+  della \itindex{Maximum~Segment~Size~(MSS)} MSS
+  (\textit{Maximum~Segment~Size}, vedi sez.~\ref{sec:net_lim_dim} e
+  sez.~\ref{sec:tcp_protocol_xxx}) dei segmenti TCP uscenti. Se l'opzione è
+  impostata prima di stabilire la connessione, si cambia anche il valore della
+  \itindex{Maximum~Segment~Size~(MSS)} MSS annunciata all'altro capo della
+  connessione. Se si specificano valori maggiori della
+  \itindex{Maximum~Transfer~Unit~(MTU)} MTU questi verranno ignorati, inoltre
+  TCP imporrà anche i suoi limiti massimo e minimo per questo valore.
 
 \item[\const{TCP\_CORK}] questa opzione è il complemento naturale di
   \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione
@@ -3573,7 +3577,7 @@ identificano le operazioni sono le seguenti:
   \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
   socket, questa operazione può essere utilizzata per effettuare delle
   misurazioni precise del tempo di andata e ritorno\footnote{il
-    \itindex{Round~Trip~Time} \textit{Round Trip Time} cui abbiamo già
+    \itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time} cui abbiamo già
     accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
 
 \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
@@ -3739,11 +3743,11 @@ sono le seguenti:
   non ancora implementato, restituisce un errore di \errval{EOPNOTSUPP}.
 
 \item[\const{SIOCGIFMTU}] permette di leggere il valore della
-  \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del
+  \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Maximum Transfer Unit} del
   dispositivo nel campo \var{ifr\_mtu}.
 
 \item[\const{SIOCSIFMTU}] permette di impostare il valore della
-  \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del
+  \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Maximum Transfer Unit} del
   dispositivo al valore specificato campo \var{ifr\_mtu}. L'operazione è
   privilegiata, e si tenga presente che impostare un valore troppo basso può
   causare un blocco del kernel.
@@ -4177,19 +4181,20 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
 
 \item[\sysctlrelfile{net/ipv4}{ip\_no\_pmtu\_disc}] permette di
   disabilitare per i socket \const{SOCK\_STREAM} la ricerca automatica della
-  \itindex{Maximum~Transfer~Unit} \textit{Path MTU} (vedi
+  \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Path MTU} (vedi
   sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}). Prende un
   valore logico, e di default è disabilitato (cioè la ricerca viene eseguita).
 
   In genere si abilita questo parametro quando per qualche motivo il
-  procedimento del \itindex{Maximum~Transfer~Unit} \textit{Path MTU discovery}
-  fallisce; dato che questo può avvenire a causa di router\footnote{ad
-    esempio se si scartano tutti i pacchetti ICMP, il problema è affrontato
-    anche in sez.~3.4.4 di \cite{SGL}.} o interfacce\footnote{ad esempio se i
-    due capi di un collegamento \textit{point-to-point} non si accordano sulla
-    stessa MTU.}  mal configurati è opportuno correggere le configurazioni,
-  perché disabilitare globalmente il procedimento con questo parametro ha
-  pesanti ripercussioni in termini di prestazioni di rete.
+  procedimento del \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Path MTU
+    discovery} fallisce; dato che questo può avvenire a causa di
+  router\footnote{ad esempio se si scartano tutti i pacchetti ICMP, il
+    problema è affrontato anche in sez.~3.4.4 di \cite{SGL}.} o
+  interfacce\footnote{ad esempio se i due capi di un collegamento
+    \textit{point-to-point} non si accordano sulla stessa MTU.}  mal
+  configurati è opportuno correggere le configurazioni, perché disabilitare
+  globalmente il procedimento con questo parametro ha pesanti ripercussioni in
+  termini di prestazioni di rete.
 
 \item[\sysctlrelfile{net/ipv4}{ip\_always\_defrag}] fa si che tutti i
   pacchetti IP frammentati siano riassemblati, anche in caso in successivo
@@ -4255,12 +4260,13 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   negativo.  Il default è 2 che significa che al buffer dell'applicazione
   viene riservato un quarto del totale.
 
-\item[\sysctlrelfile{net/ipv4}{tcp\_app\_win}] indica la frazione
-  della finestra TCP che viene riservata per gestire l'overhaed dovuto alla
+\item[\sysctlrelfile{net/ipv4}{tcp\_app\_win}] indica la frazione della
+  finestra TCP che viene riservata per gestire l'overhaed dovuto alla
   bufferizzazione. Prende un valore valore intero che consente di calcolare la
-  dimensione in byte come il massimo fra la \itindex{Maximum~Segment~Size}
-  MSS e $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa
-  che non viene riservato nessuno spazio; il valore di default è 31.
+  dimensione in byte come il massimo fra la
+  \itindex{Maximum~Segment~Size~(MSS)} MSS e
+  $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa che
+  non viene riservato nessuno spazio; il valore di default è 31.
 
 % vecchi, presumibilmente usati quando gli algoritmi di congestione non erano
 % modularizzabili 
@@ -4633,7 +4639,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % LocalWords:  ERANGE sethostent stayopen endhostent gethostbyaddr order pton
 % LocalWords:  getipnodebyname getipnodebyaddr flags num MAPPED ALL ADDRCONFIG
 % LocalWords:  freehostent ip getXXXbyname getXXXbyaddr servent getservbyname
-% LocalWords:  getservbyaddr netent getnetbyname getnetbyaddr protoent smtp udp
+% LocalWords:  netent getnetbyname getnetbyaddr protoent smtp udp
 % LocalWords:  getprotobyname getprotobyaddr getservbyport port tcp setservent
 % LocalWords:  getservent endservent setXXXent getXXXent endXXXent gethostent
 % LocalWords:  setnetent getnetent endnetent setprotoent getprotoent POSIX RFC
index 7589160..8f07483 100644 (file)
@@ -716,9 +716,10 @@ dall'altra con il diffondersi delle reti la necessità di centralizzare le
 informazioni degli utenti e dei gruppi per insiemi di macchine, in modo da
 mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare
 e memorizzare dette informazioni su supporti diversi, introducendo il sistema
-del \itindex{Name~Service~Switch} \textit{Name Service Switch} che tratteremo
-brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la maggior
-parte delle sua applicazioni sono relative alla risoluzioni di nomi di rete.
+del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che
+tratteremo brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la
+maggior parte delle sua applicazioni sono relative alla risoluzioni di nomi di
+rete.
 
 In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
@@ -850,15 +851,16 @@ fig.~\ref{fig:sys_group_struct}.
 
 Le funzioni viste finora sono in grado di leggere le informazioni sia
 direttamente dal file delle password in \conffile{/etc/passwd} che tramite il
-sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e sono
-completamente generiche. Si noti però che non c'è una funzione che permetta di
-impostare direttamente una password.\footnote{in realtà questo può essere
-  fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che POSIX non
-prevede questa possibilità esiste un'altra interfaccia che lo fa, derivata da
-SVID le cui funzioni sono riportate in tab.~\ref{tab:sys_passwd_func}. Questa
-però funziona soltanto quando le informazioni sono mantenute su un apposito
-file di \textsl{registro} di utenti e gruppi, con il formato classico di
-\conffile{/etc/passwd} e \conffile{/etc/group}.
+sistema del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} e
+sono completamente generiche. Si noti però che non c'è una funzione che
+permetta di impostare direttamente una password.\footnote{in realtà questo può
+  essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che
+POSIX non prevede questa possibilità esiste un'altra interfaccia che lo fa,
+derivata da SVID le cui funzioni sono riportate in
+tab.~\ref{tab:sys_passwd_func}. Questa però funziona soltanto quando le
+informazioni sono mantenute su un apposito file di \textsl{registro} di utenti
+e gruppi, con il formato classico di \conffile{/etc/passwd} e
+\conffile{/etc/group}.
 
 \begin{table}[htb]
   \footnotesize
@@ -868,27 +870,27 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di
     \textbf{Funzione} & \textbf{Significato}\\
     \hline
     \hline
-    \func{fgetpwent}   & Legge una voce dal file di registro degli utenti
+    \funcm{fgetpwent}   & Legge una voce dal file di registro degli utenti
+                          specificato.\\
+    \funcm{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti}
+                          rientrante.\\ 
+    \funcm{putpwent}    & Immette una voce in un file di registro degli
+                          utenti.\\ 
+    \funcm{getpwent}    & Legge una voce da \conffile{/etc/passwd}.\\
+    \funcm{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti}
+                          rientrante.\\ 
+    \funcm{setpwent}    & Ritorna all'inizio di \conffile{/etc/passwd}.\\
+    \funcm{endpwent}    & Chiude \conffile{/etc/passwd}.\\
+    \funcm{fgetgrent}   & Legge una voce dal file di registro dei gruppi 
                          specificato.\\
-    \func{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti}
-                         rientrante.\\ 
-    \func{putpwent}    & Immette una voce in un file di registro degli
-                         utenti.\\ 
-    \func{getpwent}    & Legge una voce da \conffile{/etc/passwd}.\\
-    \func{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti}
-                         rientrante.\\ 
-    \func{setpwent}    & Ritorna all'inizio di \conffile{/etc/passwd}.\\
-    \func{endpwent}    & Chiude \conffile{/etc/passwd}.\\
-    \func{fgetgrent}   & Legge una voce dal file di registro dei gruppi 
-                         specificato.\\
-    \func{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti}
-                         rientrante.\\
-    \func{putgrent}    & Immette una voce in un file di registro dei gruppi.\\
-    \func{getgrent}    & Legge una voce da \conffile{/etc/group}.\\ 
-    \func{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti} 
-                         rientrante.\\
-    \func{setgrent}    & Ritorna all'inizio di \conffile{/etc/group}.\\
-    \func{endgrent}    & Chiude \conffile{/etc/group}.\\
+    \funcm{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti}
+                          rientrante.\\
+    \funcm{putgrent}    & Immette una voce in un file di registro dei gruppi.\\
+    \funcm{getgrent}    & Legge una voce da \conffile{/etc/group}.\\ 
+    \funcm{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti} 
+                          rientrante.\\
+    \funcm{setgrent}    & Ritorna all'inizio di \conffile{/etc/group}.\\
+    \funcm{endgrent}    & Chiude \conffile{/etc/group}.\\
     \hline
   \end{tabular}
   \caption{Funzioni per la manipolazione dei campi di un file usato come
@@ -1085,15 +1087,17 @@ sono un sovrainsieme di \code{utmp}.
 
 Le \acr{glibc} utilizzano già una versione estesa di \code{utmp}, che rende
 inutili queste nuove strutture; pertanto esse e le relative funzioni di
-gestione (\func{getutxent}, \func{getutxid}, \func{getutxline},
-\func{pututxline}, \func{setutxent} e \func{endutxent}) sono ridefinite come
+gestione (\funcm{getutxent}, \funcm{getutxid}, \funcm{getutxline},
+\funcm{pututxline}, \funcm{setutxent} e \funcm{endutxent}) sono ridefinite come
 sinonimi delle funzioni appena viste.
 
+% TODO (verificare le funzioni di cui sopra )
+
 Come visto in sez.~\ref{sec:sys_user_group}, l'uso di strutture allocate
 staticamente rende le funzioni di lettura non \index{funzioni!rientranti}
 rientranti; per questo motivo le \acr{glibc} forniscono anche delle versioni
-\index{funzioni!rientranti} rientranti: \func{getutent\_r}, \func{getutid\_r},
-\func{getutline\_r}, che invece di restituire un puntatore restituiscono un
+\index{funzioni!rientranti} rientranti: \funcm{getutent\_r}, \funcm{getutid\_r},
+\funcm{getutline\_r}, che invece di restituire un puntatore restituiscono un
 intero e prendono due argomenti aggiuntivi. Le funzioni si comportano
 esattamente come le analoghe non \index{funzioni!rientranti} rientranti, solo
 che restituiscono il risultato all'indirizzo specificato dal primo argomento
@@ -2293,7 +2297,7 @@ non \index{funzioni!rientranti} rientrante, per cui nel caso si usino i
   (quella riportata dalla pagina di manuale), che restituisce \code{int} al
   posto di \code{char *}, e che tronca la stringa restituita a
   \param{size}.}  una apposita versione \index{funzioni!rientranti} rientrante
-\func{strerror\_r}, il cui prototipo è:
+\funcd{strerror\_r}, il cui prototipo è:
 \begin{prototype}{string.h}
   {char * strerror\_r(int errnum, char *buf, size\_t size)} 
   
@@ -2359,7 +2363,7 @@ completo del programma è allegato nel file \file{ErrCode.c} e contiene pure la
 gestione delle opzioni e tutte le definizioni necessarie ad associare il
 valore numerico alla costante simbolica. In particolare si è riportata la
 sezione che converte la stringa passata come argomento in un intero
-(\texttt{\small 1--2}), controllando con i valori di ritorno di \func{strtol}
+(\texttt{\small 1--2}), controllando con i valori di ritorno di \funcm{strtol}
 che la conversione sia avvenuta correttamente (\texttt{\small 4--10}), e poi
 stampa, a seconda dell'opzione scelta il messaggio di errore (\texttt{\small
   11--14}) o la macro (\texttt{\small 15--17}) associate a quel codice.
index 9961dd7..8450373 100644 (file)
@@ -135,12 +135,13 @@ comunicare all'altro capo una serie di parametri utili a regolare la
 connessione.  Normalmente vengono usate le seguenti opzioni:
 
 \begin{itemize}
-\item \textit{MSS option}, dove MMS sta per \itindex{Maximum~Segment~Size}
-  \textit{Maximum Segment Size}, con questa opzione ciascun capo della
-  connessione annuncia all'altro il massimo ammontare di dati che vorrebbe
-  accettare per ciascun segmento nella connessione corrente. È possibile
-  leggere e scrivere questo valore attraverso l'opzione del socket
-  \const{TCP\_MAXSEG} (vedi sez.~\ref{sec:sock_tcp_udp_options}).
+\item \textit{MSS option}, dove MMS sta per
+  \itindex{Maximum~Segment~Size~(MSS)} \textit{Maximum Segment Size}, con
+  questa opzione ciascun capo della connessione annuncia all'altro il massimo
+  ammontare di dati che vorrebbe accettare per ciascun segmento nella
+  connessione corrente. È possibile leggere e scrivere questo valore
+  attraverso l'opzione del socket \const{TCP\_MAXSEG} (vedi
+  sez.~\ref{sec:sock_tcp_udp_options}).
   
 \item \textit{window scale option}, il protocollo TCP implementa il controllo
   di flusso attraverso una \itindex{advertised~window} \textit{advertised
@@ -179,8 +180,8 @@ connessione.  Normalmente vengono usate le seguenti opzioni:
 
 \end{itemize}
 
-La MSS \itindex{Maximum~Segment~Size} è generalmente supportata da quasi tutte
-le implementazioni del protocollo, le ultime due opzioni (trattate
+La MSS \itindex{Maximum~Segment~Size~(MSS)} è generalmente supportata da quasi
+tutte le implementazioni del protocollo, le ultime due opzioni (trattate
 nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}) sono meno comuni;
 vengono anche dette \textit{long fat pipe options} dato che questo è il nome
 che viene dato alle connessioni caratterizzate da alta velocità o da ritardi
@@ -304,9 +305,9 @@ che il protocollo viene ad assumere per i due lati, server e client.
 \end{figure}
 
 La connessione viene iniziata dal client che annuncia una
-\itindex{Maximum~Segment~Size} MSS di 1460, un valore tipico con Linux per
-IPv4 su Ethernet, il server risponde con lo stesso valore (ma potrebbe essere
-anche un valore diverso).
+\itindex{Maximum~Segment~Size~(MSS)} MSS di 1460, un valore tipico con Linux
+per IPv4 su Ethernet, il server risponde con lo stesso valore (ma potrebbe
+essere anche un valore diverso).
 
 Una volta che la connessione è stabilita il client scrive al server una
 richiesta (che assumiamo stare in un singolo segmento, cioè essere minore dei
@@ -3143,7 +3144,7 @@ velocità consentitagli dalla rete, sul socket. Dato che la connessione è con
 una macchina remota occorre un certo tempo perché i pacchetti vi arrivino,
 vengano processati, e poi tornino indietro. Considerando trascurabile il tempo
 di processo, questo tempo è quello impiegato nella trasmissione via rete, che
-viene detto RTT (dalla denominazione inglese \itindex{Round~Trip~Time}
+viene detto RTT (dalla denominazione inglese \itindex{Round~Trip~Time~(RTT)}
 \textit{Round Trip Time}) ed è quello che viene stimato con l'uso del comando
 \cmd{ping}.
 
index dff2819..223f659 100644 (file)
@@ -59,13 +59,13 @@ comando \cmd{netstat} nel campo \textit{State}.
   \label{fig:TCP_header}
 \end{figure}
 
-\itindbeg{Maximum~Segment~Size|(}
+\itindbeg{Maximum~Segment~Size~(MSS)}
 % TODO trattare la MSS
-\itindend{Maximum~Segment~Size|)}
+\itindend{Maximum~Segment~Size~(MSS)}
 
-\itindbeg{advertised~window|(}
+\itindbeg{advertised~window}
 % TODO trattare la advertised window
-\itindend{advertised~window|)}
+\itindend{advertised~window}