Correzioni varie
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 14 Nov 2001 23:27:44 +0000 (23:27 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 14 Nov 2001 23:27:44 +0000 (23:27 +0000)
fileunix.tex
gapil.tex
network.tex
process.tex
prochand.tex
signal.tex
system.tex

index dd99a6c4eabba43720bf08f8aceeb881eb1117a9..3e1915af22d851a6259e146e7e57b37327fe0f81 100644 (file)
@@ -34,7 +34,7 @@ ogni ulteriore operazione.
 All'interno di ogni processo i file aperti sono identificati da un intero non
 negativo, chiamato appunto \textit{file descriptor}, quando un file viene
 aperto la funzione restituisce il file descriptor, e tutte le successive
-operazioni devono passare il \textit{file descriptors} come argomento.
+operazioni devono passare il \textit{file descriptor} come argomento.
 
 Per capire come funziona il meccanismo occorre spiegare a grandi linee come è
 che il kernel gestisce l'interazione fra processi e file.  Il kernel mantiene
@@ -194,7 +194,7 @@ prototipo 
     che non esiste.  
   \item \macro{ETXTBSY} si è cercato di accedere in scrittura all'immagine di
     un programma in esecuzione.
-  \item \macro{ELOOP} si sono incotrati troppi link simbolici nel risolvere
+  \item \macro{ELOOP} si sono incontrati troppi link simbolici nel risolvere
     pathname o si è indicato \macro{O\_NOFOLLOW} e \var{pathname} è un link
     simbolico.
   \end{errlist}
@@ -219,11 +219,11 @@ cio
     \hline
     \textbf{Flag} & \textbf{Descrizione} \\
     \hline
-    \hline % modailtà di accesso al file
+    \hline % modalità di accesso al file
     \macro{O\_RDONLY} & apre il file in sola lettura. \\
     \macro{O\_WRONLY} & apre il file in sola scrittura. \\
     \macro{O\_RDWR} & apre il file lettura/scrittura. \\
-    \hline % modalita di apertura del file
+    \hline % modalità di apertura del file
     \hline
     \macro{O\_CREAT} & se il file non esiste verrà creato, con le regole di
     titolarità del file viste in \secref{sec:file_ownership}. Il parametro
@@ -273,7 +273,8 @@ cio
     \macro{O\_NDELAY} & in Linux\footnotemark\ è sinonimo di 
     \macro{O\_NONBLOCK}.\\
     \macro{O\_ASYNC} & apre il file per l'input/output in modalità
-    asincrona. Non è supportato in Linux. \\
+    asincrona. Quando è settato viene generato un segnale di \macro{SIGIO}
+    tutte le volte che è disponibile dell'input sul file. \\
     \macro{O\_SYNC} & apre il file per l'input/output sincrono, ogni
     \func{write} bloccherà fino al completamento della scrittura di tutti dati
     sul sull'hardware sottostante.\\
@@ -284,8 +285,7 @@ cio
     di montaggio.\\
     \hline
   \end{tabular}
-  \caption{Costanti definite in \file{fcntl.h} per indicare i vari bit 
-    usabili per il specificare parametro \var{flags} di \func{open}.}
+  \caption{Valori e significato dei vari bit del \textit{file status flag}.}
   \label{tab:file_open_flags}
 \end{table}
 
@@ -415,7 +415,7 @@ sua volta pu
 Come già accennato in \secref{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 \var{file}) espressa da un numero intero
-positivo come numero di bytes dall'inizio del file. Tutte le operazioni di
+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.
 
@@ -442,14 +442,14 @@ sommato al riferimento dato da \var{whence}; quest'ultimo pu
 seguenti valori\footnote{per compatibilità con alcune vecchie notazioni
   questi valori possono essere rimpiazzati rispettivamente con 0, 1 e 2 o con
   \macro{L\_SET}, \macro{L\_INCR} e \macro{L\_XTND}}:
-\begin{description}
-\item \macro{SEEK\_SET} si fa riferimento all'inizio del file: il valore di
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SEEK\_SET}] si fa riferimento all'inizio del file: il valore di
   \var{offset} è la nuova posizione.
-\item \macro{SEEK\_CUR} si fa riferimento alla posizione corrente del file:
+\item[\macro{SEEK\_CUR}] si fa riferimento alla posizione corrente del file:
   \var{offset} che può essere negativo e positivo.
-\item \macro{SEEK\_END} si fa riferimento alla fine del file: il valore di
+\item[\macro{SEEK\_END}] si fa riferimento alla fine del file: il valore di
   \var{offset} può essere negativo e positivo.
-\end{description}
+\end{basedescript}
 
 Come accennato in \secref{sec:file_file_size} con \func{lseek} è possibile
 settare la posizione corrente anche al di la della fine del file, e alla
@@ -485,14 +485,14 @@ Per leggere da un file precedentemente aperto, si pu
 il cui prototipo è:
 \begin{prototype}{unistd.h}{ssize\_t read(int fd, void * buf, size\_t count)}
   
-  La funzione cerca di leggere \var{count} bytes dal file \var{fd} al buffer
+  La funzione cerca di leggere \var{count} byte dal file \var{fd} al buffer
   \var{buf}.
   
   La funzione ritorna il numero di byte letti in caso di successo e -1 in
   caso di errore, nel qual caso \var{errno} viene settata ad uno dei valori:
   \begin{errlist}
   \item \macro{EINTR} la funzione è stata interrotta da un segnale prima di
-    aver potuto leggere quasiasi dato.
+    aver potuto leggere qualsiasi dato.
     \item \macro{EAGAIN} la funzione non aveva nessun dato da restituire e si
       era aperto il file in modalità \macro{O\_NONBLOCK}.
   \end{errlist}
@@ -503,7 +503,7 @@ il cui prototipo 
 
 La funzione tenta di leggere \var{count} byte a partire dalla posizione
 corrente nel file; dopo la lettura la posizione è spostata automaticamente in
-avanti del numero di bytes letti. Se \var{count} è zero la funzione
+avanti del numero di byte letti. Se \var{count} è zero la funzione
 restituisce zero senza nessun altro risultato.
 
 Si deve sempre tener presente che non è detto che la funzione \func{read}
@@ -512,7 +512,7 @@ la funzione pu
 comportamento normale e non un errore, che però bisogna sempre tenere
 presente.
 
-La prima e più ovvia di queste ragioni è che si è chiesto di leggere più bytes
+La prima e più ovvia di queste ragioni è che si è chiesto di leggere più byte
 di quanto il file ne contenga. In questo caso il file viene letto fino alla
 sua fine, e la funzione ritorna regolarmente il numero di byte letti
 effettivamente. Se ripetessimo la lettura \func{read} restituirebbe uno zero.
@@ -548,7 +548,7 @@ sono dati in ingresso: la funzione allora ritorna immediatamente con un errore
 Lo standard Unix98\footnote{questa funzione, e l'analoga \func{pwrite} sono
   state aggiunte nel kernel 2.1.60, il supporto nelle \acr{glibc}, compresa
   l'emulazione per i vecchi kernel che non hanno la system call, è stato
-  aggiutno con la versione 2.1} (vedi \secref{sec:intro_opengroup}) prevede la
+  aggiunto con la versione 2.1} (vedi \secref{sec:intro_opengroup}) prevede la
 definizione di un'altra funzione di lettura, \func{pread}, che diventa
 accessibile con la definizione:
 \begin{verbatim}
@@ -558,7 +558,7 @@ il prototipo di questa funzione 
 \begin{prototype}{unistd.h}
 {ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
   
-La funzione cerca di leggere \var{count} bytes dal file \var{fd}, a partire
+La funzione cerca di leggere \var{count} byte dal file \var{fd}, a partire
 dalla posizione \var{offset}, nel buffer \var{buf}.
   
 La funzione ritorna il numero di byte letti in caso di successo e -1 in caso
@@ -580,7 +580,7 @@ all'inizio del file.
 Per scrivere su un file si usa la funzione \func{write}, il cui prototipo è:
 \begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)}
   
-  La funzione scrive \var{count} bytes dal buffer \var{buf} sul file \var{fd}.
+  La funzione scrive \var{count} byte dal buffer \var{buf} sul file \var{fd}.
   
   La funzione ritorna il numero di byte scritti in caso di successo e -1 in
   caso di errore, nel qual caso \var{errno} viene settata ad uno dei valori:
@@ -595,7 +595,7 @@ Per scrivere su un file si usa la funzione \func{write}, il cui prototipo 
     \macro{SIGPIPE}, se questo viene gestito (o bloccato o ignorato) la
     funzione ritorna questo errore.
   \item \macro{EINTR} la funzione è stata interrotta da un segnale prima di
-    aver potuto scerivere quasiasi dato.
+    aver potuto scrivere qualsiasi dato.
   \item \macro{EAGAIN} la funzione non aveva nessun dato da restituire e si
     era aperto il file in modalità \macro{O\_NONBLOCK}.
   \end{errlist}
@@ -606,7 +606,7 @@ Per scrivere su un file si usa la funzione \func{write}, il cui prototipo 
 
 Come nel caso di \func{read} la funzione tenta di scrivere \var{count} byte a
 partire dalla posizione corrente nel file e sposta automaticamente la
-posizione in avanti del numero di bytes scritti. Se il file è aperto in
+posizione in avanti del numero di byte scritti. Se il file è aperto in
 modalità \macro{O\_APPEND} i dati vengono sempre scritti alla fine del file.
 Lo standard POSIX richiede che i dati scritti siano immediatamente disponibili
 ad una \func{read} chiamata dopo che la \func{write} che li ha scritti è
@@ -614,7 +614,7 @@ ritornata; ma dati i meccanismi di caching non 
 supportino questa capacità.
 
 Se \var{count} è zero la funzione restituisce zero senza fare nient'altro. Per
-i file ordinari il numero di bytes scritti è sempre uguale a quello indicato
+i file ordinari il numero di byte scritti è sempre uguale a quello indicato
 da \var{count}, a meno di un errore. Negli altri casi si ha lo stesso
 comportamento di \func{read}.
 
@@ -625,7 +625,7 @@ suo prototipo 
 {ssize\_t pwrite(int fd, void * buf, size\_t count, off\_t offset)}
   
 La funzione cerca di scrivere sul file \var{fd}, a partire dalla posizione
-\var{offset}, \var{count} bytes dal buffer \var{buf}.
+\var{offset}, \var{count} byte dal buffer \var{buf}.
   
 La funzione ritorna il numero di byte letti in caso di successo e -1 in caso
 di errore, nel qual caso \var{errno} viene settata secondo i valori già visti
@@ -637,7 +637,7 @@ per \func{write} e \func{lseek}.
 \section{Caratteristiche avanzate}
 \label{sec:file_adv_func}
 
-In questa sezione approfondireme alcune delle caratteristiche più sottili
+In questa sezione approfondiremo alcune delle caratteristiche più sottili
 della gestione file in un sistema unix-like, esaminando in dettaglio il
 comportamento delle funzioni base, inoltre tratteremo alcune funzioni che
 permettono di eseguire operazioni avanzate con i file.
@@ -696,7 +696,7 @@ stesso file, in particolare occorre tenere presente che:
 
 È comunque possibile che due file descriptor di due processi diversi puntino
 alla stessa voce nella \textit{file table}; questo è ad esempio il caso dei
-file aperti che venfono ereditati dal processo figlio all'esecuzione di una
+file aperti che vengono ereditati dal processo figlio all'esecuzione di una
 \func{fork} (si ricordi quanto detto in \secref{sec:proc_fork}). La situazione
 è illustrata in \figref{fig:file_acc_child}; dato che il processo figlio
 riceve una copia dello spazio di indirizzi del padre, riceverà anche una copia
@@ -704,7 +704,7 @@ di \var{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
-posizione corrente sul file. Questo ha le cosenguenze descritte a suo tempo in
+posizione corrente sul file. Questo ha le conseguenze descritte a suo tempo in
 \secref{sec:proc_fork}: in caso di scrittura contemporanea la posizione
 corrente nel file varierà per entrambi i processi (in quanto verrà modificato
 \var{f\_pos} che è la stesso per entrambi).
@@ -793,8 +793,8 @@ La funzione ritorna, come \func{open}, il primo file descriptor libero. Il
 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 \figref{fig:file_dup}: l'effetto della funzione è
-semplicamente quello di copiare il valore nella struttura \var{file\_struct},
-cosicché anche il nuovo file descriptor fa riferirimento alla stessa voce
+semplicemente quello di copiare il valore nella struttura \var{file\_struct},
+cosicché anche il nuovo file descriptor fa riferimento alla stessa voce
 nella \textit{file table}.
 
 \begin{figure}[htb]
@@ -839,7 +839,7 @@ come valore per \param{newfd} diventa equivalente a \func{dup}. La sola
 differenza, a parte i codici di errore, è che \func{dup2} chiude il nuovo file
 se è già aperto mentre \func{fcntl} apre il primo disponibile con un valore
 superiore, per cui per poterla usare come \func{dup2} occorrerebbe prima
-effettare una \func{close}, perdendo l'atomicità dell'operazione.
+effettuare una \func{close}, perdendo l'atomicità dell'operazione.
 
 L'uso principale di queste funzioni è per la redirezione dell'input e
 dell'output fra l'esecuzione di una \func{fork} e la successiva \func{exec};
@@ -883,7 +883,7 @@ un esempio, una lista dei possibili valori 
   \macro{EMFILE} se il processo ha già raggiunto il massimo numero di
   descrittori consentito.
 \item[\macro{F\_SETFD}] setta il valore del \textit{file descriptor flag}
-  al valore specificato con\param{arg}. Al momento l'unico bit usato è
+  al valore specificato con \param{arg}. Al momento l'unico bit usato è
   quello di \textit{close on exec}, identificato dalla costante
   \macro{FD\_CLOEXEC}.
 \item[\macro{F\_GETFD}] ritorna il valore del \textit{file descriptor flag} di
@@ -898,10 +898,7 @@ un esempio, una lista dei possibili valori 
   nella terza sezione di \tabref{tab:file_open_flags} (da verificare).
 \end{basedescript}
 
+
 \subsection{La funzione \func{ioctl}}
 \label{sec:file_ioctl}
 
-
-
-
-
index 3b8ed0bce59169bbb4fd74946df4440205a300a8..162be338cf4875e578e1416aa0802bcdf457b262 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
@@ -1,4 +1,4 @@
-%%
+%% 
 %% GaPiL : Guida alla Programmazione in Linux
 %%
 %% S. Piccardi Oct. 2000
index 38861150f79d9dee8f5c632303f5b48c4560a247..9f84d7dd9b3b738ec96839cd0b5f3e50de4bfe11 100644 (file)
@@ -101,7 +101,7 @@ della Difesa Americano.
 
 \begin{figure}[!htbp]
   \centering
-  \includegraphics[width=8cm]{img/iso_tcp_comp}
+  \includegraphics[width=12cm]{img/iso_tcp_comp}
   \caption{Struttura a livelli dei protocolli OSI e TCP/IP, con la  
     relative corrispondenze e la divisione fra kernel e user space.}
   \label{fig:net_osi_tcpip_comp}
@@ -165,7 +165,7 @@ La comunicazione fra due stazioni avviene secondo le modalit
 lo scambio di informazione su ciascuno livello.
 \begin{figure}[!htb]
   \centering
-  \includegraphics[width=6cm]{img/tcp_data_flux}  
+  \includegraphics[width=10cm]{img/tcp_data_flux}  
   \caption{Strutturazione del flusso dei dati nella comunicazione fra due
     applicazioni attraverso i protocolli della suite TCP/IP.}
   \label{fig:net_tcpip_data_flux}
@@ -259,6 +259,7 @@ concentrandoci per le ragioni esposte sul livello di trasporto. All'interno di
 questo privilegeremo poi il protocollo TCP, per il ruolo centrale che svolge
 nella maggior parte delle applicazioni.
 
+
 \subsection{Il quadro generale}
 
 Benché si parli di TCP/IP questa famiglia di protocolli è composta anche da
index d495395f3f10dcc8c94a9b1a96285453f6327682..4b896d84a9ad984ac4d8367af6a47f8003128a58 100644 (file)
@@ -33,6 +33,7 @@ posto in esecuzione esso apparir
 discorso dei \textit{thread} comunque in Linux necessita di una trattazione a
 parte per la peculiarità dell'implementazione).
 
+
 \subsection{La funzione \func{main}} 
 \label{sec:proc_main}
 
@@ -563,8 +564,8 @@ segmento di stack della funzione corrente. La sintassi 
   di successo e \macro{NULL} in caso di fallimento, nel qual caso
   \var{errno} viene settata a \macro{ENOMEM}.
 \end{prototype}
-ma in questo caso non è più necessario liberare la memoria in quanto questa
-viene rilasciata automaticamente al ritorno della funzione.
+\noindent ma in questo caso non è più necessario liberare la memoria in quanto
+questa viene rilasciata automaticamente al ritorno della funzione.
 
 Come è evidente questa funzione ha molti vantaggi, e permette di evitare i
 problemi di memory leak non essendo più necessaria la deallocazione esplicita;
index 6e99c3cd56cd21ca618899c856e23edb9c77df06..0cda60653a9ca67f273b9099e7a4ec71bbbdab67 100644 (file)
@@ -196,7 +196,7 @@ ottenuti da programma usando le funzioni:
 
 Entrambe le funzioni non riportano condizioni di errore. 
 \end{functions}
-esempi dell'uso di queste funzioni sono riportati in
+\noindent esempi dell'uso di queste funzioni sono riportati in
 \figref{fig:proc_fork_code}, nel programma di esempio \file{ForkTest.c}.
 
 Il fatto che il \acr{pid} sia un numero univoco per il sistema lo rende il
index 239544ce388f423bf2f3567d2f7e23736a0f9fd3..c35561b3476b0f97e80b001dbbb9d78710456897 100644 (file)
@@ -19,7 +19,7 @@ Come il nome stesso indica i segnali sono usati per notificare ad un processo
 l'occorrenza di un evento eccezionale. Gli eventi che possono generare un
 segnale sono vari; un breve elenco di possibile cause è il seguente:
 
-\begin{itemize}
+\begin{itemize*}
 \item un errore del programma, come una divisione per zero o un tentativo di
   accesso alla memoria fuori dai limiti validi.
 \item la terminazione di un processo figlio.
@@ -31,7 +31,7 @@ segnale sono vari; un breve elenco di possibile cause 
   della pressione di tasti del terminale come 'ctrl-c' o 'ctrl-z'.
 \item l'esecuzione di una \func{kill} o di una \func{raise} da parte del
   processo stesso o di un'altro (solo nel caso della \func{kill}).
-\end{itemize}
+\end{itemize*}
 
 Ciascuno di questi eventi (tranne gli ultimi due che sono controllati
 dall'utente) comporta l'intervento diretto da parte del kernel che causa la
@@ -223,12 +223,12 @@ segnale. Per alcuni segnali (\macro{SIGKILL} e \macro{SIGSTOP}) questa azione
 è fissa e non può essere cambiata, ma per tutti gli altri il programma può
 specificare una scelta fra le tre seguenti:
 
-\begin{itemize}
+\begin{itemize*}
 \item ignorare il segnale.
 \item catturare il segnale, ed utilizzare il manipolatore (\textit{signal
     handler}) specificato.
 \item accettare l'azione di default per quel segnale.
-\end{itemize}
+\end{itemize*}
 
 Il programma può specificare queste scelte usano le due routine
 \func{signal} e \func{sigaction}; se si è installato un manipolatore sarà
@@ -395,8 +395,8 @@ dell'errore, che il debugger pu
 al momento della terminazione.
 
 Questi segnali sono:
-\begin{description}
-\item \macro{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SIGFPE}] Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
   aritmetici compresa la divisione per zero e l'overflow. 
 
@@ -405,7 +405,7 @@ Questi segnali sono:
 %   standard IEEE per le operazioni in virgola mobile definisce vaire eccezioni
 %   aritmetiche e richiede che esse siano notificate.  
 
-\item \macro{SIGILL} Il nome deriva da \textit{illegal instruction},
+\item[\macro{SIGILL}] Il nome deriva da \textit{illegal instruction},
   significa che il programma sta cercando di eseguire una istruzione
   privilegiata o inesistente, in generale del codice illegale. Poiché il
   compilatore del C genera del codice valido si ottiene questo segnale se il
@@ -415,7 +415,7 @@ Questi segnali sono:
   una variabile locale, andando a corrompere lo stack. Lo stesso segnale viene
   generato in caso di overflow dello stack o di problemi nell'esecuzione di di
   un signal handler.
-\item \macro{SIGSEGV} Il nome deriva da \textit{segment violation}, e
+\item[\macro{SIGSEGV}] Il nome deriva da \textit{segment violation}, e
   significa che il programma sta cercando di leggere o scrivere in una zona di
   memoria protetta al di fuori di quella che gli è stata riservata dal
   sistema. In genere è il meccanismo della protezione della memoria che si
@@ -423,23 +423,23 @@ Questi segnali sono:
 
   È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
   inizializzato leggendo al di la della fine di un vettore. 
-\item \macro{SIGBUS} Il nome deriva da \textit{bus error}. Come
+\item[\macro{SIGBUS}] Il nome deriva da \textit{bus error}. Come
   \macro{SIGSEGV} questo è un segnale che viene generato di solito quando si
   dereferenzia un puntatore non inzializzato, la differenza è che
   \macro{SIGSEGV} indica un accesso non permesso su un indirizzo esistente
   (tipo fuori dallo heap o dallo stack), mentre \macro{SIGBUS} indica
   l'accesso ad un indirizzo non valido, come nel caso di un puntatore non
   allineato.
-\item \macro{SIGABRT} Il nome deriva da \textit{abort}. Il segnale indica che
+\item[\macro{SIGABRT}] Il nome deriva da \textit{abort}. Il segnale indica che
   il programma stesso ha rilevato un errore che viene riportato chiamando la
   funzione \func{abort} che genera questo segnale.
-\item \macro{SIGTRAP} È il segnale generato da un'istruzione di breakpoint o
+\item[\macro{SIGTRAP}] È il segnale generato da un'istruzione di breakpoint o
   dall'attivazione del tracciamento per il processo. È usato dai programmi per
   il debugging e se un programma normale non dovrebbe ricevere questo segnale.
-\item \macro{SIGSYS} Sta ad indicare che si è eseguita una istruzione che
+\item[\macro{SIGSYS}] Sta ad indicare che si è eseguita una istruzione che
   richiede l'esecuzione di una system call, ma si è fornito un codice
   sbagliato per quest'ultima.
-\end{description}
+\end{basedescript}
 
 
 \subsection{I segnali di terminazione}
@@ -458,18 +458,18 @@ periferica).
 
 L'azione di default di questi segnali è di terminare il processo, questi
 segnali sono:
-\begin{description}
-\item \macro{SIGTERM} Il nome sta per \textit{terminate}. È un segnale
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SIGTERM}] Il nome sta per \textit{terminate}. È un segnale
   generico usato per causare la conclusione di un programma. Al contrario di
   \macro{SIGKILL} può essere intercettato, ignorato, bloccato. In genere lo si
   usa per chiedere in maniera ``educata'' ad un processo di concludersi.
-\item \macro{SIGINT} Il nome sta per \textit{interrupt}. È il segnale di
+\item[\macro{SIGINT}] Il nome sta per \textit{interrupt}. È il segnale di
   interruzione per il programma. È quello che viene generato di default dal
   comando \cmd{kill} o dall'invio sul terminale del carattere di controllo
   INTR (interrupt, generato dalla sequenza \macro{C-c}).
-\item  \macro{SIGQUIT} È analogo a \macro{SIGINT} con la differenze che è
+\item[\macro{SIGQUIT}] È analogo a \macro{SIGINT} con la differenze che è
   controllato da un'altro carattere di controllo, QUIT, corrispondente alla
-  sequenza \macro{C-\\}. A differenza del precedente l'azione di default,
+  sequenza \verb|C-\|. A differenza del precedente l'azione di default,
   oltre alla terminazione del processo, comporta anche la creazione di un core
   dump. 
 
@@ -479,7 +479,7 @@ segnali sono:
   normalmente previste (tipo la cancellazione di file temporanei), dato che in
   certi casi esse possono eliminare informazioni utili nell'esame dei core
   dump. 
-\item \macro{SIGKILL} Il nome è utilizzato per terminare in maniera immediata
+\item[\macro{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata
   qualunque programma. Questo segnale non può essere né intercettato, né
   ignorato, né bloccato, per cui causa comunque la terminazione del processo.
   In genere esso viene generato solo per richiesta esplicita dell'utente dal
@@ -493,7 +493,7 @@ segnali sono:
   kernel). Talvolta è il sistema stesso che può generare questo segnale quando
   per condizioni particolari il processo non può più essere eseguito neanche
   per eseguire il manipolatore.
-\item \macro{SIGHUP} Il nome sta per \textit{hang-up}. Segnala che il
+\item[\macro{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il
   terminale dell'utente si è disconnesso (ad esempio perché si è interrotta la
   rete). Viene usato anche per riportare la terminazione del processo di
   controllo di un terminale a tutti i processi della sessione, in modo che
@@ -502,7 +502,8 @@ segnali sono:
   Viene inoltre usato in genere per segnalare ai demoni (che non hanno un
   terminale di controllo) la necessità di reinizializzarsi e rileggere il/i
   file di configurazione.
-\end{description}
+\end{basedescript}
+
 
 \subsection{I segnali di allarme}
 \label{sec:sig_alarm}
@@ -511,19 +512,19 @@ Questi segnali sono generati dalla scadenza di un timer. Il loro comportamento
 di default è quello di causare la terminazione del programma, ma con questi
 segnali la scelta di default è irrilevante, in quanto il loro uso presuppone
 sempre la necessità di un manipolatore.  Questi segnali sono:
-\begin{description}
-\item \macro{SIGALRM} Il nome sta per \textit{alarm}. Segnale la scadenza di
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di
   un timer misurato sul tempo reale o sull'orologio di sistema. È normalmente
   usato dalla funzione \func{alarm}.
-\item  \macro{SIGVTALRM} Il nome sta per \textit{virtual alarm}. È analogo al
+\item[\macro{SIGVTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
   precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal
   processo. 
-\item \macro{SIGPROF} Il nome sta per \textit{profiling}. Indica la scadenza
+\item[\macro{SIGPROF}] Il nome sta per \textit{profiling}. Indica la scadenza
   di un timer che misura sia il tempo di CPU speso direttamente dal processo
   che quello che il sistema ha speso per conto di quest'ultimo. In genere
   viene usato dai tool che servono a fare il profilo d'uso della CPU da parte
   del processo.
-\end{description}
+\end{basedescript}
 
 
 \subsection{I segnali di I/O asincrono}
@@ -534,17 +535,18 @@ questo occorre comunque usare \func{fcntl} per abilitare un file descriptor a
 generare questi segnali. 
 
 L'azione di default è di essere ignorati. Questi segnali sono:
-\begin{description}
-\item \macro{SIGIO} Questo segnale viene inviato quando un file descriptor è
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SIGIO}] Questo segnale viene inviato quando un file descriptor è
   pronto per eseguire dell'input/output. In molti sistemi solo i socket e i
   terminali possono generare questo segnale, in Linux questo può essere usato
   anche per i file, posto che la \func{fcntl} abbia avuto successo.
-\item \macro{SIGURG} Questo segnale è inviato quando arrivano dei dati
+\item[\macro{SIGURG}] Questo segnale è inviato quando arrivano dei dati
   urgenti o \textit{out of band} su di un socket; per maggiori dettagli al
   proposito si veda \secref{sec:xxx_urgent_data}.
-\item \macro{SIGPOLL} Questo segnale è equivalente a \macro{SIGIO}, è
+\item[\macro{SIGPOLL}] Questo segnale è equivalente a \macro{SIGIO}, è
   definito solo per compatibilità con i sistemi System V.
-\end{description}
+\end{basedescript}
+
 
 \subsection{I segnali per il controllo di sessione}
 \label{sec:sig_job_control}
@@ -552,13 +554,13 @@ L'azione di default 
 Questi sono i segnali usati dal controllo delle sessioni e dei processi, il
 loro uso è specifico e viene trattato in maniera specifica nelle sezioni in
 cui si trattano gli argomenti relativi.  Questi segnali sono:
-\begin{description} 
-\item \macro{SIGCHLD} Questo è il segnale mandato al processo padre quando un
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SIGCHLD}] Questo è il segnale mandato al processo padre quando un
   figlio termina o viene fermato. L'azione di default è di ignorare il
   segnale, la sua gestione è trattata in \secref{sec:proc_wait}.
-\item \macro{SIGCLD} Per Linux questo è solo un segnale identico al
+\item[\macro{SIGCLD}] Per Linux questo è solo un segnale identico al
   precedente, il nome è obsoleto e andrebbe evitato. 
-\item \macro{SIGCONT} Il nome sta per \textit{continue}. Il segnale viene
+\item[\macro{SIGCONT}] Il nome sta per \textit{continue}. Il segnale viene
   usato per fare ripartire un programma precedentemente fermato da
   \macro{SIGSTOP}. Questo segnale ha un comportamento speciale, e fa sempre
   ripartire il processo prima della sua consegna. Il comportamento di default
@@ -572,9 +574,9 @@ cui si trattano gli argomenti relativi.  Questi segnali sono:
   manipolatori per far si che un programma produca una qualche azione speciale
   se viene fermato e riavviato, come per esempio riscrivere un prompt, o
   inviare un avviso. 
-\item \macro{SIGSTOP} Il segnale ferma un processo (lo porta in uno stato di
+\item[\macro{SIGSTOP}] Il segnale ferma un processo (lo porta in uno stato di
   sleep); il segnale non può essere né intercettato, né ignorato, né bloccato.
-\item \macro{SIGTSTP} Il nome sta per \textit{interactive stop}. Il segnale
+\item[\macro{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale
   ferma il processo interattivamente, ed è generato dal carattere SUSP
   (prodotto dalla combinazione \macro{C-z}), ed al contrario di
   \macro{SIGSTOP} può essere intercettato e ignorato. In genere un programma
@@ -582,9 +584,10 @@ cui si trattano gli argomenti relativi.  Questi segnali sono:
   o il terminale in uno stato definito prima di fermarsi; se per esempio un
   programma ha disabilitato l'eco sul terminale può installare un manipolatore
   per riabilitarlo prima di fermarsi.
-\item \macro{SIGTTIN} 
-\item \macro{SIGTTOU}
-\end{description}
+\item[\macro{SIGTTIN}]
+\item[\macro{SIGTTOU}]
+\end{basedescript}
+
 
 \subsection{I segnali di operazioni errate}
 \label{sec:sig_oper_error}
@@ -596,18 +599,18 @@ resto del sistema.
 
 L'azione di default di questi segnali è di terminare il processo, questi
 segnali sono:
-\begin{description}
-\item \macro{SIGPIPE} Sta per \textit{Broken pipe}. Se si usano delle pipe o
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SIGPIPE}] Sta per \textit{Broken pipe}. Se si usano delle pipe o
   delle FIFO è necessario che, prima che un processo inizi a scrivere su di
   essa, un'altro abbia aperto la pipe in lettura (si veda
   \secref{sec:ipc_pipes}). Se il processo in lettura non è partito o è
   terminato inavvertitamente alla scrittura sulla pipe il kernel genera questo
   segnale. Se il segnale è bloccato, intercettato o ignorato la chiamata che
   lo ha causato fallisce restituendo l'errore \macro{EPIPE} 
-\item \macro{SIGLOST} Sta per \textit{Resource lost}.
-\item \macro{SIGXCPU} Sta per \textit{CPU time limit exceeded}.
-\item \macro{SIGXFSZ} Sta per \textit{File size limit exceeded}.
-\end{description}
+\item[\macro{SIGLOST}] Sta per \textit{Resource lost}.
+\item[\macro{SIGXCPU}] Sta per \textit{CPU time limit exceeded}.
+\item[\macro{SIGXFSZ}] Sta per \textit{File size limit exceeded}.
+\end{basedescript}
 
 
 \subsection{Ulteriori segnali}
@@ -615,22 +618,22 @@ segnali sono:
 
 Raccogliamo qui infine usa serie di segnali che hanno scopi differenti non
 classificabili in maniera omogenea. Questi segnali sono:
-\begin{description}
-\item \macro{SIGUSR1} e \macro{SIGUSR2} Sono due segnali a disposizione
+\begin{basedescript}{\desclabelwidth{2.0cm}}
+\item[\macro{SIGUSR1}] e \macro{SIGUSR2} Sono due segnali a disposizione
   dell'utente che li può usare per quello che vuole. Possono essere utili per
   implementare una comunicazione elementare fra processi diversi, o per
   eseguire a richiesta una operazione utilizzando un manipolatore. L'azione di
   default è terminare il processo.
-\item \macro{SIGWINCH} Il nome sta per \textit{window (size) change} ed è
+\item[\macro{SIGWINCH}] Il nome sta per \textit{window (size) change} ed è
   generato da molti sistemi (GNU/Linux compreso) quando le dimensioni (in
   righe e colonne) di un terminale vengono cambiate. Viene usato da alcuni
   programmi testuali per riformattare l'uscita su schermo quando si cambia
   dimensione a quest'ultimo. L'azione di default è di essere ignorato.
-\item  \macro{SIGINFO} Il segnale indica una richiesta di informazioni. È
+\item[\macro{SIGINFO}] Il segnale indica una richiesta di informazioni. È
   usato con il controllo di sessione, causa la stampa di informazioni da parte
   del processo leader del gruppo associato al terminale di controllo, gli
   altri processi lo ignorano.
-\end{description}
+\end{basedescript}
 
 
 \subsection{Le funzioni \func{strsignal} e \func{psignal}}
@@ -698,7 +701,7 @@ forma pi
   (*handler)(int)))int)}, e che è sostanzialmente equivalente alla
 definizione:
 \begin{verbatim}
-typedef void (* sighandler_t)(int) 
+    typedef void (* sighandler_t)(int) 
 \end{verbatim}
 cioè un puntatore ad una funzione di tipo \type{void} con un parametro di tipo
 \type{int}\footnote{si devono usare le parentesi intorno al nome della
index 2ca86bf8b3cb74ebaaf0204f6befd77ebcb305f2..37672860ad9878fd16ba11fe1e10cd8628b8458d 100644 (file)
@@ -140,6 +140,7 @@ provvista\footnote{questa funzione 
   specificato da \var{buff} di lunghezza massima (compreso il terminatore)
   \var{size}.
 \end{prototype}
+\noindent
 che utilizza un buffer che il singolo thread deve allocare, per evitare i
 problemi connessi alla condivisione del buffer statico. Infine, per completare
 la caratterizzazione dell'errore, si può usare anche la variabile