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
 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,
 \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}
 
   }
 \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}
 \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}
 
 
 \section{Altre modalità di I/O avanzato}
@@ -1163,37 +1161,34 @@ prototipi sono:
 \begin{functions}
   \headdecl{sys/uio.h}
   
 \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}
   
   \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{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}
   \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}
 
 \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
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1206,12 +1201,12 @@ il secondo, \var{iov\_len}, la dimensione dello stesso.
   \label{fig:file_iovec}
 \end{figure}
 
   \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}
 
 
 \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. 
 
 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
 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}.
 
 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
 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
 
 \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}
   \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
 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
   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}.
 \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, 
 \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}.
     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
 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
 (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
 
 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} 
   
 \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 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
 \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}
 
   \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;
 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}).}
 
   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{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{12cm}|}
+  \begin{tabular}[c]{|l|p{13cm}|}
     \hline
     \textbf{Flag} & \textbf{Descrizione} \\
     \hline
     \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}
 
   \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
 \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
   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
   \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
 
 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}
 
 \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
 \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
 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
 
 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
 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
 
 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}
   
   \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}}
 \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}
 \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} 
 
 \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.
 
 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
 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