Correzioni di impaginazione e qualche precisazione.
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 4 Jan 2007 19:14:07 +0000 (19:14 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 4 Jan 2007 19:14:07 +0000 (19:14 +0000)
fileadv.tex
filedir.tex
fileunix.tex
signal.tex
sockctrl.tex
system.tex

index b4c7d0012595d51cd65f87f041d978b6a19b3875..75f04719580043d508630eda1a59ef497cc50dba 100644 (file)
@@ -1026,10 +1026,9 @@ valore di \param{aiocbp}.  Quando una operazione viene cancellata una
 successiva chiamata ad \func{aio\_error} riporterà \errcode{ECANCELED} come
 codice di errore, ed il suo codice di ritorno sarà -1, inoltre il meccanismo
 di notifica non verrà invocato. Se si specifica una operazione relativa ad un
-altro file descriptor il risultato è indeterminato.
-
-In caso di successo, i possibili valori di ritorno per \func{aio\_cancel} sono
-tre (anch'essi definiti in \file{aio.h}):
+altro file descriptor il risultato è indeterminato.  In caso di successo, i
+possibili valori di ritorno per \func{aio\_cancel} (anch'essi definiti in
+\file{aio.h}) sono tre:
 \begin{basedescript}{\desclabelwidth{3.0cm}}
 \item[\const{AIO\_ALLDONE}] indica che le operazioni di cui si è richiesta la
   cancellazione sono state già completate,
@@ -1104,29 +1103,28 @@ lettura o scrittura; il suo prototipo 
   }
 \end{prototype}
 
-La funzione esegue la richiesta delle \param{nent} operazioni indicate dalla
-lista \param{list}; questa deve contenere gli indirizzi di altrettanti
-\textit{control block}, opportunamente inizializzati; in particolare nel caso
-dovrà essere specificato il tipo di operazione tramite il campo
-\var{aio\_lio\_opcode}, che può prendere i tre valori:
+La funzione esegue la richiesta delle \param{nent} operazioni indicate nella
+lista \param{list} che deve contenere gli indirizzi di altrettanti
+\textit{control block} opportunamente inizializzati; in particolare dovrà
+essere specificato il tipo di operazione con il campo \var{aio\_lio\_opcode},
+che può prendere i valori:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\const{LIO\_READ}]  si richiede una operazione di lettura.
 \item[\const{LIO\_WRITE}] si richiede una operazione di scrittura.
 \item[\const{LIO\_NOP}] non si effettua nessuna operazione.
 \end{basedescript}
-l'ultimo valore viene usato quando si ha a che fare con un vettore di
-dimensione fissa, per poter specificare solo alcune operazioni, o quando si è
-dovuto cancellare delle operazioni e si deve ripetere la richiesta per quelle
-non completate.
+dove \const{LIO\_NOP} viene usato quando si ha a che fare con un vettore di
+dimensione fissa, per poter specificare solo alcune operazioni, o quando si
+sono dovute cancellare delle operazioni e si deve ripetere la richiesta per
+quelle non completate.
 
-L'argomento \param{mode} permette di stabilire il comportamento della
-funzione, se viene specificato il valore \const{LIO\_WAIT} la funzione si
-blocca fino al completamento di tutte le operazioni richieste; se invece si
-specifica \const{LIO\_NOWAIT} la funzione ritorna immediatamente dopo aver
-messo in coda tutte le richieste. In questo caso il chiamante può richiedere
-la notifica del completamento di tutte le richieste, impostando l'argomento
-\param{sig} in maniera analoga a come si fa per il campo \var{aio\_sigevent}
-di \struct{aiocb}.
+L'argomento \param{mode} controlla il comportamento della funzione, se viene
+usato il valore \const{LIO\_WAIT} la funzione si blocca fino al completamento
+di tutte le operazioni richieste; se si usa \const{LIO\_NOWAIT} la funzione
+ritorna immediatamente dopo aver messo in coda tutte le richieste. In tal caso
+il chiamante può richiedere la notifica del completamento di tutte le
+richieste, impostando l'argomento \param{sig} in maniera analoga a come si fa
+per il campo \var{aio\_sigevent} di \struct{aiocb}.
 
 
 \section{Altre modalità di I/O avanzato}
@@ -1163,37 +1161,34 @@ prototipi sono:
 \begin{functions}
   \headdecl{sys/uio.h}
   
-  \funcdecl{int readv(int fd, const struct iovec *vector, int count)} Esegue
-  una lettura vettorizzata da \param{fd} nei \param{count} buffer specificati
-  da \param{vector}.
-  
-  \funcdecl{int writev(int fd, const struct iovec *vector, int count)} Esegue
-  una scrittura vettorizzata da \param{fd} nei \param{count} buffer
-  specificati da \param{vector}.
+  \funcdecl{int readv(int fd, const struct iovec *vector, int count)} 
+  \funcdecl{int writev(int fd, const struct iovec *vector, int count)} 
+
+  Eseguono rispettivamente una lettura o una scrittura vettorizzata.
   
   \bodydesc{Le funzioni restituiscono il numero di byte letti o scritti in
     caso di successo, e -1 in caso di errore, nel qual caso \var{errno}
     assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato.
   \item[\errcode{EINVAL}] si è specificato un valore non valido per uno degli
     argomenti (ad esempio \param{count} è maggiore di \const{MAX\_IOVEC}).
   \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale prima di
     di avere eseguito una qualunque lettura o scrittura.
   \item[\errcode{EAGAIN}] \param{fd} è stato aperto in modalità non bloccante e
   non ci sono dati in lettura.
-  \item[\errcode{EOPNOTSUPP}] La coda delle richieste è momentaneamente piena.
+  \item[\errcode{EOPNOTSUPP}] la coda delle richieste è momentaneamente piena.
   \end{errlist}
-  ed inoltre \errval{EISDIR}, \errval{ENOMEM}, \errval{EFAULT} (se non sono
-  stato allocati correttamente i buffer specificati nei campi
-  \var{iov\_base}), più tutti gli ulteriori errori che potrebbero avere le
-  usuali funzioni di lettura e scrittura eseguite su \param{fd}.}
+  ed anche \errval{EISDIR}, \errval{EBADF}, \errval{ENOMEM}, \errval{EFAULT}
+  (se non sono stati allocati correttamente i buffer specificati nei campi
+  \var{iov\_base}), più gli eventuali errori delle funzioni di lettura e
+  scrittura eseguite su \param{fd}.}
 \end{functions}
 
-Entrambe le funzioni usano una struttura \struct{iovec}, definita in
-fig.~\ref{fig:file_iovec}, che definisce dove i dati devono essere letti o
-scritti. Il primo campo, \var{iov\_base}, contiene l'indirizzo del buffer ed
-il secondo, \var{iov\_len}, la dimensione dello stesso. 
+Entrambe le funzioni usano una struttura \struct{iovec}, la cui definizione è
+riportata in fig.~\ref{fig:file_iovec}, che definisce dove i dati devono
+essere letti o scritti ed in che quantità. Il primo campo della struttura,
+\var{iov\_base}, contiene l'indirizzo del buffer ed il secondo,
+\var{iov\_len}, la dimensione dello stesso.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1206,12 +1201,12 @@ il secondo, \var{iov\_len}, la dimensione dello stesso.
   \label{fig:file_iovec}
 \end{figure}
 
-I buffer da utilizzare sono indicati attraverso l'argomento \param{vector} che
-è un vettore di strutture \struct{iovec}, la cui lunghezza è specificata da
-\param{count}.  Ciascuna struttura dovrà essere inizializzata per
-opportunamente per indicare i vari buffer da/verso i quali verrà eseguito il
-trasferimento dei dati. Essi verranno letti (o scritti) nell'ordine in cui li
-si sono specificati nel vettore \param{vector}.
+La lista dei buffer da utilizzare viene indicata attraverso l'argomento
+\param{vector} che è un vettore di strutture \struct{iovec}, la cui lunghezza
+è specificata dall'argomento \param{count}.  Ciascuna struttura dovrà essere
+inizializzata opportunamente per indicare i vari buffer da e verso i quali
+verrà eseguito il trasferimento dei dati. Essi verranno letti (o scritti)
+nell'ordine in cui li si sono specificati nel vettore \param{vector}.
 
 
 \subsection{File mappati in memoria}
@@ -1225,6 +1220,14 @@ cosiddetto \textit{memory-mapped I/O}, che, attraverso il meccanismo della
 sez.~\ref{sec:proc_mem_gen}), permette di \textsl{mappare} il contenuto di un
 file in una sezione dello spazio di indirizzi del processo. 
 
+\begin{figure}[htb]
+  \centering
+  \includegraphics[width=12cm]{img/mmap_layout}
+  \caption{Disposizione della memoria di un processo quando si esegue la
+  mappatura in memoria di un file.}
+  \label{fig:file_mmap_layout}
+\end{figure}
+
 Il meccanismo è illustrato in fig.~\ref{fig:file_mmap_layout}, una sezione del
 file viene \textsl{mappata} direttamente nello spazio degli indirizzi del
 programma.  Tutte le operazioni di lettura e scrittura su variabili contenute
@@ -1236,14 +1239,6 @@ segmento di memoria con quello del file mappato su di esso.  Per questo motivo
 si può parlare tanto di \textsl{file mappato in memoria}, quanto di
 \textsl{memoria mappata su file}.
 
-\begin{figure}[htb]
-  \centering
-  \includegraphics[width=14cm]{img/mmap_layout}
-  \caption{Disposizione della memoria di un processo quando si esegue la
-  mappatura in memoria di un file.}
-  \label{fig:file_mmap_layout}
-\end{figure}
-
 L'uso del \textit{memory-mapping} comporta una notevole semplificazione delle
 operazioni di I/O, in quanto non sarà più necessario utilizzare dei buffer
 intermedi su cui appoggiare i dati da traferire, poiché questi potranno essere
index 239c9950e51c5db9d8bcdc0ef509dbf7e1858d35..b73660a3ed85215c4e69e0fbfe55b78bc9500957 100644 (file)
@@ -432,7 +432,7 @@ stringa con un carattere nullo e la tronca alla dimensione specificata da
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=9cm]{img/link_loop}
+  \includegraphics[width=8cm]{img/link_loop}
   \caption{Esempio di loop nel filesystem creato con un link simbolico.}
   \label{fig:file_link_loop}
 \end{figure}
@@ -828,11 +828,11 @@ il nome del relativo campo; nel nostro caso sono definite le macro
 Per quanto riguarda il significato dei campi opzionali, il campo \var{d\_type}
 indica il tipo di file (fifo, directory, link simbolico, ecc.); i suoi
 possibili valori\footnote{fino alla versione 2.1 delle \acr{glibc} questo
-  campo, pur presente nella struttura, non è implementato, e resta sempre al
+  campo, pur presente nella struttura, non era implementato, e resta sempre al
   valore \const{DT\_UNKNOWN}.}  sono riportati in
-tab.~\ref{tab:file_dtype_macro}; per la conversione da e verso l'analogo valore
-mantenuto dentro il campo \var{st\_mode} di \struct{stat} sono definite anche
-due macro di conversione \macro{IFTODT} e \macro{DTTOIF}:
+tab.~\ref{tab:file_dtype_macro}; per la conversione da e verso l'analogo
+valore mantenuto dentro il campo \var{st\_mode} di \struct{stat} sono definite
+anche due macro di conversione \macro{IFTODT} e \macro{DTTOIF}:
 \begin{functions}
   \funcdecl{int IFTODT(mode\_t MODE)} Converte il tipo di file dal formato di
   \var{st\_mode} a quello di \var{d\_type}.
@@ -897,7 +897,7 @@ ed ordinamento) del contenuto di una directory; la funzione 
 \funcd{scandir}\footnote{in Linux questa funzione è stata introdotta fin dalle
   libc4.} ed il suo prototipo è:
 \begin{prototype}{dirent.h}{int scandir(const char *dir, 
-    struct dirent ***namelist, int(*select)(const struct dirent *),
+    struct dirent ***namelist, int(*filter)(const struct dirent *),
     int(*compar)(const struct dirent **, const struct dirent **))} 
   
   Esegue una scansione di un \textit{directory stream}.
@@ -909,27 +909,33 @@ ed ordinamento) del contenuto di una directory; la funzione 
 Al solito, per la presenza fra gli argomenti di due puntatori a funzione, il
 prototipo non è molto comprensibile; queste funzioni però sono quelle che
 controllano rispettivamente la selezione di una voce (quella passata con
-l'argomento \param{select}) e l'ordinamento di tutte le voci selezionate
+l'argomento \param{filter}) e l'ordinamento di tutte le voci selezionate
 (quella specificata dell'argomento \param{compar}).
 
 La funzione legge tutte le voci della directory indicata dall'argomento
-\param{dir}, passando ciascuna di esse (una struttura \struct{dirent}) come
-argomento della funzione di selezione specificata da \param{select}; se questa
-ritorna un valore diverso da zero la voce viene inserita in un vettore che
-viene allocato dinamicamente con \func{malloc}.  Qualora si specifichi un
-valore \val{NULL} per \func{select} vengono selezionate tutte le voci.
+\param{dir}, passando un puntatore a ciascuna di esse (una struttura
+\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
+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 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 delle strutture \struct{dirent} così ordinate viene
-restituito nell'argomento \param{namelist}.
-
-Per l'ordinamento (vale a dire come valori possibili per l'argomento
-\param{compar}) sono disponibili anche due funzioni predefinite,
-\funcd{alphasort} e \funcd{versionsort}, i cui prototipi sono:
+\param{compar} come criterio di ordinamento di \func{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
+\struct{dirent} viene restituito nell'argomento
+\param{namelist}.\footnote{la funzione alloca automaticamente la lista, e
+  restituisce, come \itindex{value~result~argument} \textit{value result
+    argument}, l'indirizzo della stessa; questo significa che \param{namelist}
+  deve essere dichiarato come \code{struct dirent **namelist} ed alla funzione
+  si deve passare il suo indirizzo.}
+
+Per l'ordinamento, vale a dire come valori possibili per l'argomento
+\param{compar} sono disponibili due funzioni predefinite, \funcd{alphasort} e
+\funcd{versionsort}, i cui prototipi sono:
 \begin{functions}
   \headdecl{dirent.h} 
   
@@ -1612,13 +1618,6 @@ cancellare i file che non servono pi
 il programma \cmd{leafnode} cancella i vecchi articoli sulla base di questo
 tempo).
 
-Il tempo di ultima modifica invece viene usato da \cmd{make} per decidere
-quali file necessitano di essere ricompilati o (talvolta insieme anche al
-tempo di cambiamento di stato) per decidere quali file devono essere
-archiviati per il backup. Il comando \cmd{ls} (quando usato con le opzioni
-\cmd{-l} o \cmd{-t}) mostra i tempi dei file secondo lo schema riportato
-nell'ultima colonna di tab.~\ref{tab:file_file_times}.
-
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -1692,6 +1691,14 @@ nell'ultima colonna di tab.~\ref{tab:file_file_times}.
   \label{tab:file_times_effects}  
 \end{table}
 
+
+Il tempo di ultima modifica invece viene usato da \cmd{make} per decidere
+quali file necessitano di essere ricompilati o (talvolta insieme anche al
+tempo di cambiamento di stato) per decidere quali file devono essere
+archiviati per il backup. Il comando \cmd{ls} (quando usato con le opzioni
+\cmd{-l} o \cmd{-t}) mostra i tempi dei file secondo lo schema riportato
+nell'ultima colonna di tab.~\ref{tab:file_file_times}.
+
 L'effetto delle varie funzioni di manipolazione dei file sui tempi è
 illustrato in tab.~\ref{tab:file_times_effects}. Si sono riportati gli effetti
 sia per il file a cui si fa riferimento, sia per la directory che lo contiene;
index 7ff6ca06bba698eef71005f7cb5da3fa8e95dd36..60f34900bdf82c25b06b9917201c149ed433d1ff 100644 (file)
@@ -241,15 +241,10 @@ ritorno il file descriptor con il valore pi
   alternativa di usare un file con un nome univoco e la funzione \func{link}
   per verificarne l'esistenza (vedi sez.~\ref{sec:ipc_file_lock}).}
 
-\footnotetext[3]{acronimo di \itindex{Denial~of~Service~(DoS)} \textit{Denial
-    of Service}, si chiamano così attacchi miranti ad impedire un servizio
-  causando una qualche forma di carico eccessivo per il sistema, che resta
-  bloccato nelle risposte all'attacco.}
-
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{12cm}|}
+  \begin{tabular}[c]{|l|p{13cm}|}
     \hline
     \textbf{Flag} & \textbf{Descrizione} \\
     \hline
@@ -360,6 +355,11 @@ ritorno il file descriptor con il valore pi
   \label{tab:file_open_flags}
 \end{table}
 
+\footnotetext[3]{acronimo di \itindex{Denial~of~Service~(DoS)} \textit{Denial
+    of Service}, si chiamano così attacchi miranti ad impedire un servizio
+  causando una qualche forma di carico eccessivo per il sistema, che resta
+  bloccato nelle risposte all'attacco.}
+
 \footnotetext[4]{il problema è che NFS non supporta la scrittura in
   \itindex{append~mode} \textit{append}, ed il kernel deve simularla, ma
   questo comporta la possibilità di una \itindex{race~condition} \textit{race
index edbc674a269a802be44392f4542287b56a155fbe..26b3ac9a82cc27e44ffc37bef4080f589a432bfd 100644 (file)
@@ -904,18 +904,20 @@ e che prende un argomento di tipo \ctyp{int}.\footnote{si devono usare le
   operatori del C, senza di esse si sarebbe definita una funzione che ritorna
   un puntatore a \ctyp{void} e non un puntatore ad una funzione \ctyp{void}.}
 La funzione \func{signal} quindi restituisce e prende come secondo argomento
-un puntatore a una funzione di questo tipo, che è appunto il gestore del
-segnale.
-
-Il numero di segnale passato in \param{signum} può essere indicato
-direttamente con una delle costanti definite in sez.~\ref{sec:sig_standard}. Il
-gestore \param{handler} invece, oltre all'indirizzo della funzione da chiamare
-all'occorrenza del segnale, può assumere anche i due valori costanti
-\const{SIG\_IGN} con cui si dice di ignorare il segnale e \const{SIG\_DFL} per
-reinstallare l'azione predefinita.\footnote{si ricordi però che i due segnali
+un puntatore a una funzione di questo tipo, che è appunto la funzione che
+verrà usata come gestore del segnale.
+
+Il numero di segnale passato nell'argomento \param{signum} può essere indicato
+direttamente con una delle costanti definite in sez.~\ref{sec:sig_standard}.
+L'argomento \param{handler} che indica il gestore invece, oltre all'indirizzo
+della funzione da chiamare all'occorrenza del segnale, può assumere anche i
+due valori costanti \const{SIG\_IGN} e \const{SIG\_DFL}; il primo indica che
+il segnale deve essere ingnorato,\footnote{si ricordi però che i due segnali
   \const{SIGKILL} e \const{SIGSTOP} non possono essere né ignorati né
   intercettati; l'uso di \const{SIG\_IGN} per questi segnali non ha alcun
-  effetto.}
+  effetto.} mentre il secondo ripristina l'azione predefinita.\footnote{e
+  serve a tornare al comportamento di default quando non si intende più
+  gesrire direttamente un segnale.}
 
 La funzione restituisce l'indirizzo dell'azione precedente, che può essere
 salvato per poterlo ripristinare (con un'altra chiamata a \func{signal}) in un
@@ -954,9 +956,10 @@ questi segnali pu
 \subsection{Le funzioni \func{kill} e \func{raise}}
 \label{sec:sig_kill_raise}
 
-Come accennato in sez.~\ref{sec:sig_types}, un segnale può essere generato
-direttamente da un processo attraverso una opportuna system call. Le funzioni
-che si usano di solito per inviare un segnale generico sono due, \func{raise} e
+Come precedentemente accennato in sez.~\ref{sec:sig_types}, un segnale può
+anche essere generato direttamente nell'esecuzione di un programma, attraverso
+la chiamata ad una opportuna system call. Le funzioni che si utilizzano di
+solito per inviare un segnale generico ad un processo sono due: \func{raise} e
 \func{kill}.
 
 La prima funzione è \funcd{raise}, che è definita dallo standard ANSI C, e
index df3ed6921e0c0feb3ffb826be486b32ca4913bf8..37084e5116dfbe3aa83fafe66e4a8c46448cfc55 100644 (file)
@@ -2365,7 +2365,7 @@ chiuso dopo aver impostato un errore di \errcode{ETIMEDOUT}. Qualora la
 connessione si sia ristabilita e si riceva un successivo messaggio di risposta
 il ciclo riparte come se niente fosse avvenuto.  Infine se si riceve come
 risposta un pacchetto ICMP di destinazione irraggiungibile (vedi
-sez.~\ref{sec:icmp_protocol_xxx}), verrà restituito l'errore corrispondente.
+sez.~\ref{sec:ICMP_protocol}), verrà restituito l'errore corrispondente.
 
 In generale questa opzione serve per individuare una caduta della connessione
 anche quando non si sta facendo traffico su di essa.  Viene usata
index f2569bf90a08beaedfe5654b421cbfe5fd784a78..5f0a6395c4f9affea161fe2b3606863e2920a3df 100644 (file)
@@ -1158,11 +1158,13 @@ della macchina.
 I dati vengono usualmente\footnote{questa è la locazione specificata dal
   \textit{Linux Filesystem Hierarchy Standard}, adottato dalla gran parte
   delle distribuzioni.} memorizzati nei due file \file{/var/run/utmp} e
-\file{/var/log/wtmp}. Quando un utente si collega viene aggiunta una voce a
-\file{/var/run/utmp} in cui viene memorizzato il nome di login, il terminale
-da cui ci si collega, l'\acr{uid} della shell di login, l'orario della
-connessione ed altre informazioni.  La voce resta nel file fino al logout,
-quando viene cancellata e spostata in \file{/var/log/wtmp}.
+\file{/var/log/wtmp}.\footnote{non si confonda quest'ultimo con il simile
+  \file{/var/log/btmp} dove invece vengono memorizzati dal programma di login
+  tutti tentativi di accesso fallito.} Quando un utente si collega viene
+aggiunta una voce a \file{/var/run/utmp} in cui viene memorizzato il nome di
+login, il terminale da cui ci si collega, l'\acr{uid} della shell di login,
+l'orario della connessione ed altre informazioni.  La voce resta nel file fino
+al logout, quando viene cancellata e spostata in \file{/var/log/wtmp}.
 
 In questo modo il primo file viene utilizzato per registrare chi sta
 utilizzando il sistema al momento corrente, mentre il secondo mantiene la
@@ -1195,34 +1197,29 @@ sono:
   
   \bodydesc{Le funzioni non ritornano codici di errore.}
 \end{functions}
-
-In caso questo non venga specificato nessun file viene usato il valore
-standard \const{\_PATH\_UTMP} (che è definito in \file{paths.h}); in genere
-\func{utmpname} prevede due possibili valori:
+e si tenga presente che le funzioni non restituiscono nessun valore, pertanto
+non è possibile accorgersi di eventuali errori (ad esempio se si è impostato
+un nome di file sbagliato con \func{utmpname}).
+
+Nel caso non si sia utilizzata \func{utmpname} per specificare un file di
+registro alternativo, sia \func{setutent} che \func{endutent} operano usando
+il default che è \file{/var/run/utmp}. Il nome di questo file, così come una
+serie di altri valori di default per i \textit{pathname} di uso più comune,
+viene mantenuto nei valori di una serie di costanti definite includendo
+\file{paths.h}, in particolare quelle che ci interessano sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
-\item[\const{\_PATH\_UTMP}] Specifica il registro per gli utenti correntemente
-  collegati.
-\item[\const{\_PATH\_WTMP}] Specifica il registro per l'archivio storico degli
-  utenti collegati.
+\item[\const{\_PATH\_UTMP}] specifica il file che contiene il registro per gli
+  utenti correntemente collegati; questo è il valore che viene usato se non si
+  è utilizzato \func{utmpname} per modificarlo.
+\item[\const{\_PATH\_WTMP}] specifica il file che contiene il registro per
+  l'archivio storico degli utenti collegati.
 \end{basedescript}
-corrispondenti ai file \file{/var/run/utmp} e \file{/var/log/wtmp} visti in
-precedenza.
-
-\begin{figure}[!htb]
-  \footnotesize
-  \centering
-  \begin{minipage}[c]{15cm}
-    \includestruct{listati/utmp.h}
-  \end{minipage} 
-  \normalsize 
-  \caption{La struttura \structd{utmp} contenente le informazioni di una voce
-    del registro di \textsl{contabilità}.}
-  \label{fig:sys_utmp_struct}
-\end{figure}
+che nel caso di Linux hanno un valore corrispondente ai file
+\file{/var/run/utmp} e \file{/var/log/wtmp} citati in precedenza.
 
-Una volta aperto il file si può eseguire una scansione leggendo o scrivendo
-una voce con le funzioni \funcd{getutent}, \funcd{getutid}, \funcd{getutline}
-e \funcd{pututline}, i cui prototipi sono:
+Una volta aperto il file del registro degli utenti si può eseguire una
+scansione leggendo o scrivendo una voce con le funzioni \funcd{getutent},
+\funcd{getutid}, \funcd{getutline} e \funcd{pututline}, i cui prototipi sono:
 \begin{functions}
   \headdecl{utmp.h} 
 
@@ -1249,6 +1246,19 @@ fig.~\ref{fig:sys_utmp_struct}. Le prime tre funzioni servono per leggere una
 voce dal registro; \func{getutent} legge semplicemente la prima voce
 disponibile; le altre due permettono di eseguire una ricerca.
 
+
+\begin{figure}[!htb]
+  \footnotesize
+  \centering
+  \begin{minipage}[c]{15cm}
+    \includestruct{listati/utmp.h}
+  \end{minipage} 
+  \normalsize 
+  \caption{La struttura \structd{utmp} contenente le informazioni di una voce
+    del registro di \textsl{contabilità}.}
+  \label{fig:sys_utmp_struct}
+\end{figure}
+
 Con \func{getutid} si può cercare una voce specifica, a seconda del valore del
 campo \var{ut\_type} dell'argomento \param{ut}.  Questo può assumere i valori
 riportati in tab.~\ref{tab:sys_ut_type}, quando assume i valori