Risistemate le macro, nadato avanti coi segnali, aggiornato il makefile.
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 24 Jun 2001 16:54:11 +0000 (16:54 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 24 Jun 2001 16:54:11 +0000 (16:54 +0000)
Makefile
gapil.tex
macro.tex
process.tex
signal.tex

index e23ceede40af969a78caa223de23914fdfe89b70..905e19b779bc5a0bd118916532e36822ab47c06c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,19 +1,19 @@
 all: html dvi ps pdf
 
 html:
 all: html dvi ps pdf
 
 html:
-       latex2html -local_icons main.tex
+       latex2html -local_icons gapil.tex
 
 dvi: 
 
 dvi: 
-       latex main.tex
+       latex gapil.tex
 
 pdf: 
 
 pdf: 
-       pdflatex main.tex
+       pdflatex gapil.tex
 
 ps: 
 
 ps: 
-       dvips -o gapil.ps main.dvi
+       dvips -o gapil.ps gapil.dvi
 
 install:
 
 install:
-       scp gapil  piccardi@firenze.linux.it:public_html
+       scp -r gapil*  piccardi@firenze.linux.it:public_html
 
 clean: 
        rm -f *.dvi *.log *.ps *.html *.aux
\ No newline at end of file
 
 clean: 
        rm -f *.dvi *.log *.ps *.html *.aux
\ No newline at end of file
index a8b017bded62350b9a54f9f1fe9c4d78cbae39c6..2564ee76184f7194fefe20bc38a2c93ff1b87029 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
@@ -1,4 +1,4 @@
-%% 
+%%
 %% GaPiL : Guida alla Programmazione in Linux
 %%
 %% S. Piccardi Feb. 2001
 %% GaPiL : Guida alla Programmazione in Linux
 %%
 %% S. Piccardi Feb. 2001
index e832de665e94eeadba3f93e13caa3cdd7a9ef821..c2ef967920a08819b51c1e1bc259ee8f642b65d5 100644 (file)
--- a/macro.tex
+++ b/macro.tex
@@ -93,7 +93,7 @@ tab.~\thechapter.\theusercount}
 % Slighty different envirnoment to be used for multi-header, 
 % multi-functions boxed description
 %
 % Slighty different envirnoment to be used for multi-header, 
 % multi-functions boxed description
 %
-\newcommand{\headdecl}[1]{\par \texttt{\#include <#1>}}
+\newcommand{\headdecl}[1]{\item\texttt{\#include <#1>}}
 \newcommand{\funcdecl}[1]{\item\texttt{#1}\par}
 \newenvironment{functions}
 {% defining what is done by \begin
 \newcommand{\funcdecl}[1]{\item\texttt{#1}\par}
 \newenvironment{functions}
 {% defining what is done by \begin
@@ -111,6 +111,14 @@ tab.~\thechapter.\theusercount}
 \normalsize 
 \par
 }
 \normalsize 
 \par
 }
-
-
+%
+% Wrapper for shell command, functions, filenames, links,
+% variables, macros,  and everything can be useul, 
+%
+\newcommand{\cmd}[1]{\texttt{#1}}
+\newcommand{\func}[1]{\texttt{#1}}
+\newcommand{\macro}[1]{\texttt{#1}}
+\newcommand{\var}[1]{\texttt{#1}}
+\newcommand{\file}[1]{\texttt{#1}}
+\newcommand{\link}[1]{\texttt{#1}}
 
 
index 741d4bb89bbb7a2ea1debaf019dad15ee1a50972..adddd0913df61669fd61c77450f9fd7f619bb494 100644 (file)
@@ -460,36 +460,7 @@ quattro, i prototipi sono i seguenti:
   Disalloca lo spazio di memoria puntato da \texttt{ptr}.
 
   La funzione non ritorna nulla.
   Disalloca lo spazio di memoria puntato da \texttt{ptr}.
 
   La funzione non ritorna nulla.
-
 \end{functions}
 \end{functions}
-\begin{prototype}{stdlib.h}{void *calloc(size\_t size)}
-  Alloca \texttt{size} bytes nello heap. La memoria viene inizializzata a 0.
-  
-  La funzione restituisce il puntatore alla zona di memoria allocata in caso
-  di successo e \texttt{NULL} in caso di fallimento, nel qual caso
-  \texttt{errno} viene settata a \texttt{ENOMEM}.
-\end{prototype}
-\begin{prototype}{stdlib.h}{void *malloc(size\_t size)}
-  Alloca \texttt{size} bytes nello heap. La memoria non viene inizializzata.
-
-  La funzione restituisce il puntatore alla zona di memoria allocata in caso
-  di successo e \texttt{NULL} in caso di fallimento, nel qual caso
-  \texttt{errno} viene settata a \texttt{ENOMEM}.
-\end{prototype}
-\begin{prototype}{stdlib.h}{void free(void *ptr)}
-  Disalloca lo spazio di memoria puntato da \texttt{ptr}.
-
-  La funzione non ritorna nulla.
-\end{prototype}
-\begin{prototype}{stdlib.h}{void *realloc(void *ptr, size\_t size)}
-  Cambia la dimensione del blocco allocato all'indirizzo \texttt{ptr}
-  portandola a \texttt{size}.
-
-  La funzione restituisce il puntatore alla zona di memoria allocata in caso
-  di successo e \texttt{NULL} in caso di fallimento, nel qual caso
-  \texttt{errno} viene settata a \texttt{ENOMEM}.
-\end{prototype}
-
 Il puntatore che le funzioni di allocazione ritornano è garantito essere
 sempre correttamente allineato per tutti i tipi di dati; ad esempio sulle
 macchine a 32 bit in genere è allineato a multipli di 4 bytes e sulle macchine
 Il puntatore che le funzioni di allocazione ritornano è garantito essere
 sempre correttamente allineato per tutti i tipi di dati; ad esempio sulle
 macchine a 32 bit in genere è allineato a multipli di 4 bytes e sulle macchine
index 073a4cddfdb577411d76b20af3d7cd26cce64ba7..50e54a86e6ab60e0a75638884cf7dbc00c179304 100644 (file)
@@ -187,16 +187,16 @@ Ciascun segnale 
 diretto di questo numero da parte dei programmi è da evitare, in quanto esso
 può variare a seconda dell'implementazione del sistema.
 
 diretto di questo numero da parte dei programmi è da evitare, in quanto esso
 può variare a seconda dell'implementazione del sistema.
 
-Per questo ad ogni tipo di segnale viene associato un nome, che corrisponde
-tramite una macro di preprocessore, al suddetto numero, e sono questi nomi,
-che sono standardizzati e uniformi rispetto alle varie implementazioni, che si
+Per questo ad ogni tipo di segnale viene associato un nome, che corrisponde,
+tramite una macro di preprocessore, al suddetto numero. Sono questi nomi, che
+sono standardizzati e uniformi rispetto alle varie implementazioni, che si
 devono usare nei programmi. Tutti i nomi e le funzioni che concernono i
 segnali sono definiti nell'header di sistema \texttt{signal.h}.
 
 Il numero totale di segnali presenti è dato dalla macro \texttt{NSIG}, e dato
 che i numeri dei segnali sono allocati progressivamente, essa corrisponde
 devono usare nei programmi. Tutti i nomi e le funzioni che concernono i
 segnali sono definiti nell'header di sistema \texttt{signal.h}.
 
 Il numero totale di segnali presenti è dato dalla macro \texttt{NSIG}, e dato
 che i numeri dei segnali sono allocati progressivamente, essa corrisponde
-anche al successivo del valore numerico assegnato all'ultimo segnale definito,
-in \ntab\ si è riportato l'elenco completo dei segnali definiti in Linux
+anche al successivo del valore numerico assegnato all'ultimo segnale definito.
+In \ntab\ si è riportato l'elenco completo dei segnali definiti in Linux
 (estratto dalle man page), comparati con quelli definiti in vari standard.
 
 \begin{table}[htb]
 (estratto dalle man page), comparati con quelli definiti in vari standard.
 
 \begin{table}[htb]
@@ -249,8 +249,8 @@ in \ntab\ si 
   \caption{Lista dei segnali in Linux}
   \label{tab:sig_signal_list}
 \end{table}
   \caption{Lista dei segnali in Linux}
   \label{tab:sig_signal_list}
 \end{table}
-in \curtab\ si sono riportate anche le caratteristiche di ciascun segnale
-indicate nel campo azione con una lettera, la cui legenda è:
+in \curtab\ si sono riportate anche le caratteristiche di ciascun segnale,
+indicate con una lettera nel campo azione, la cui legenda è:
 \begin{table}[htb]
   \centering
   \begin{tabular}[c]{c p{6cm}}
 \begin{table}[htb]
   \centering
   \begin{tabular}[c]{c p{6cm}}
@@ -266,8 +266,9 @@ indicate nel campo azione con una lettera, la cui legenda 
     \tabref{tab:sig_signal_list}. }
   \label{tab:sig_action_leg}
 \end{table}
     \tabref{tab:sig_signal_list}. }
   \label{tab:sig_action_leg}
 \end{table}
-
-
+la descrizione dettagliata del significato dei vari segnali, raggruppati per
+tipologia, è a seguire; una descrizione dettagliata del significato delle
+varie azioni si trova invece in \secred{sec:sig_handlers}.
 
 
 \subsubsection{Segnali di errore di programma}
 
 
 \subsubsection{Segnali di errore di programma}
@@ -290,12 +291,12 @@ non ci fosse stato.
 
 L'azione di default per tutti questi segnali è causare la terminazione del
 processo che li ha causati. In genere oltre a questo il segnale provoca pure
 
 L'azione di default per tutti questi segnali è causare la terminazione del
 processo che li ha causati. In genere oltre a questo il segnale provoca pure
-la registrazione su disco di un \textit{core dump file} che viene scritto in
-un file \texttt{core} nella directory corrente del processo al momento
-dell'errore.
+la registrazione su disco di un file di \textit{core dump} che viene scritto
+in un file \texttt{core} nella directory corrente del processo al momento
+dell'errore, che il debugger può usare per ricostruire lo stato del programma
+al momento della terminazione.
 
 Questi segnali sono:
 
 Questi segnali sono:
-
 \begin{description}
 \item \texttt{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
 \begin{description}
 \item \texttt{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
@@ -316,7 +317,6 @@ 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.
   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 \texttt{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
 \item \texttt{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
@@ -325,14 +325,12 @@ Questi segnali sono:
 
   È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
   inizializzato leggendo al di la della fine di un vettore. 
 
   È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
   inizializzato leggendo al di la della fine di un vettore. 
-  
 \item \texttt{SIGBUS} In maniera analoga a \texttt{SIGSEGV} questo è un
   segnale che viene generato di solito quando si dereferenzia un puntatore non
   inzializzato, la differenza con con \texttt{SIGSEGV} è che questo indica un
   accesso non valido su un indirizzo esistente (tipo fuori dallo heap o dallo
   stack), mentre \texttt{SIGBUS} indica l'accesso ad un indirizzo non valido,
   come nel caso di un puntatore non allineato. 
 \item \texttt{SIGBUS} In maniera analoga a \texttt{SIGSEGV} questo è un
   segnale che viene generato di solito quando si dereferenzia un puntatore non
   inzializzato, la differenza con con \texttt{SIGSEGV} è che questo indica un
   accesso non valido su un indirizzo esistente (tipo fuori dallo heap o dallo
   stack), mentre \texttt{SIGBUS} indica l'accesso ad un indirizzo non valido,
   come nel caso di un puntatore non allineato. 
-
 \item \texttt{SIGABRT} Il segnale indica che il programma stesso ha rilevato
   un errore che viene riportato chiamando la funzione \texttt{abort} che
   genera questo segnale. 
 \item \texttt{SIGABRT} Il segnale indica che il programma stesso ha rilevato
   un errore che viene riportato chiamando la funzione \texttt{abort} che
   genera questo segnale. 
@@ -370,6 +368,11 @@ segnali sono:
 \subsection{I segnali di allarme}
 \label{sec:sig_alarm}
 
 \subsection{I segnali di allarme}
 \label{sec:sig_alarm}
 
+Questi segnali sono generati dalla scadenza di un temporizzatore. Il loro
+comportamento di default è quello di causare la terminazione del programma, ma
+nessun default ha una utlità avrebbe una utilità particolare, in quanto l'uso
+di questi segnali presuppone quasi sempre la necessità di un
+manipolatore. Questi segnali sono:
 \begin{description}
 \item  \texttt{SIGALRM}
 \item  \texttt{SIGVTALRM}
 \begin{description}
 \item  \texttt{SIGALRM}
 \item  \texttt{SIGVTALRM}
@@ -380,6 +383,11 @@ segnali sono:
 \subsection{I segnali di I/O asincrono}
 \label{sec:sig_asyncio}
 
 \subsection{I segnali di I/O asincrono}
 \label{sec:sig_asyncio}
 
+Questi segnali operano in congiunzione con le funzioni di I/O asincrono. Per
+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  \texttt{SIGIO}
 \item  \texttt{SIGURG}
 \begin{description}
 \item  \texttt{SIGIO}
 \item  \texttt{SIGURG}
@@ -389,7 +397,9 @@ segnali sono:
 \subsection{I segnali per il controllo di sessione}
 \label{sec:sig_job_control}
 
 \subsection{I segnali per il controllo di sessione}
 \label{sec:sig_job_control}
 
-
+Questi sono i segnali usati dal controllo di sessione, il loro uso è specifico
+per questo argomento e verrà trattato quando lo affronteremo. 
+Questi  segnali sono:
 \begin{description}
 \item  \texttt{SIGCHLD}
 \item  \texttt{SIGCONT}
 \begin{description}
 \item  \texttt{SIGCHLD}
 \item  \texttt{SIGCONT}
@@ -402,6 +412,13 @@ segnali sono:
 \subsection{I segnali di operazioni errate}
 \label{sec:sig_oper_error}
 
 \subsection{I segnali di operazioni errate}
 \label{sec:sig_oper_error}
 
+Questi segnali sono usati per riportare al programma errori generati da
+operazioni da lui eseguite; non indicano errori del programma quanto errori
+che impediscono il completamento dell'esecuzione dovute all'interazione con il
+resto del sistema.
+
+L'azione di default di questi segnali è di terminare il processo, questi
+segnali sono:
 \begin{description}
 \item  \texttt{SIGPIPE}
 \item  \texttt{SIGLOST}
 \begin{description}
 \item  \texttt{SIGPIPE}
 \item  \texttt{SIGLOST}
@@ -413,6 +430,8 @@ segnali sono:
 \subsection{Ulteriori segnali}
 \label{sec:sig_misc_sig}
 
 \subsection{Ulteriori segnali}
 \label{sec:sig_misc_sig}
 
+Raccogliamo qui infine usa serie di segnali che hanno scopi differenti non
+classificabili in maniera omogenea. Questi segnali sono:
 \begin{description}
 \item  \texttt{SIGUSR1} e \texttt{SIGUSR2}
 \item  \texttt{SIGWINCH}
 \begin{description}
 \item  \texttt{SIGUSR1} e \texttt{SIGUSR2}
 \item  \texttt{SIGWINCH}
@@ -420,3 +439,25 @@ segnali sono:
 \end{description}
 
 
 \end{description}
 
 
+
+\section{La gestione dei segnali}
+\label{sec:sig_handlers}
+
+I segnali sono il primo e più classico esempio di eventi asincroni, che
+possono accadere in un qualunque momento durante l'esecuzione di un programma.
+Non essendo sotto il controllo del programma la gestione dei segnali non potrà
+essere controllata all'interno del flusso di esecuzione di quest'ultimo, ma
+tutto quello che si potrà fare è di specificare (al kernel, che li genera)
+quale azione andrà intrapresa quando essi si verificano.
+
+In questa sezione vedremo allora come si gestiscono i segnali, partendo dalla
+descrizione di cosa fanno le azioni di default citate in precedenza, per poi
+esaminare le funzioni usate per personalizzare la gestione dei segnali,
+analizzando tutte le problematiche relative alla gestione di eventi asincroni
+di questo tipo.
+
+
+
+\subsection{Le azioni di default}
+\label{sec:sig_default_acttion}
+