Passata generale di ispell
[gapil.git] / process.tex
index e022c2ecd102bf31c3aaef6b9d78688a9ee73e11..ed4cb07879c6cb45c815df2f58bf61127140bbe6 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}
 
@@ -152,7 +153,7 @@ prototipo della funzione 
   La funzione non ritorna. Il processo viene terminato.
 \end{prototype}
 
-La funzione chiude tutti i file descriptor appartenenti al processo (sui tenga
+La funzione chiude tutti i file descriptor appartenenti al processo (si tenga
 presente che questo non comporta il salvataggio dei dati bufferizzati degli
 stream), fa si che ogni figlio del processo sia ereditato da \cmd{init}
 (vedi \secref{cha:process_handling}), manda un segnale \macro{SIGCHLD} al
@@ -233,11 +234,12 @@ Lo schema delle modalit
 
 \begin{figure}[htb]
   \centering
-  
+  \includegraphics[width=12cm]{img/proc_beginend}
   \caption{Schema dell'avvio e della conclusione di un programma.}
   \label{fig:proc_prog_start_stop}
 \end{figure}
 
+
 Si ricordi infine che un programma può anche essere interrotto dall'esterno
 attraverso l'uso di un segnale (modalità di conclusione non mostrata in
 \curfig); torneremo su questo aspetto in \secref{cha:signals}.
@@ -389,7 +391,7 @@ programma C viene suddiviso nei seguenti segmenti:
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=5cm]{img/memory_layout.eps}
+  \includegraphics[width=5cm]{img/memory_layout}
   \caption{Disposizione tipica dei segmenti di memoria di un processo}
   \label{fig:proc_mem_layout}
 \end{figure}
@@ -522,7 +524,7 @@ particolare:
 \begin{itemize*}
 \item se la variabile è posta a zero gli errori vengono ignorati.
 \item se è posta ad 1 viene stampato un avviso sullo \textit{standard error}
-  (vedi \secref{sec:file_stdfiles}).
+  (vedi \secref{sec:file_std_stream}).
 \item se è posta a 2 viene chiamata \func{abort}, che in genere causa
   l'immediata conclusione del programma.
 \end{itemize*}
@@ -562,13 +564,13 @@ 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;
 una delle ragioni principali per usarla è però che funziona anche quando si
-usa \func{longjump} per uscire con un salto non locale da una funzione (vedi
+usa \func{longjmp} per uscire con un salto non locale da una funzione (vedi
 \secref{sec:proc_longjmp}),
 
 Un altro vantaggio e che in Linux la funzione è molto veloce e non viene
@@ -710,7 +712,7 @@ Le funzioni per bloccare e sbloccare singole sezioni di memoria sono
   caso \var{errno} è settata ad uno dei valori seguenti:
   \begin{errlist}
   \item \macro{ENOMEM} alcuni indirizzi dell'intervallo specificato non
-    corripondono allo spazio di indirizzi del processo o si è ecceduto il
+    corrispondono allo spazio di indirizzi del processo o si è ecceduto il
     numero massimo consentito di pagine bloccate.
   \item \macro{EPERM} il processo non ha i privilegi richiesti per
     l'operazione. 
@@ -725,7 +727,7 @@ Le funzioni per bloccare e sbloccare singole sezioni di memoria sono
   \var{errno} è settata ad uno dei valori seguenti:
   \begin{errlist}
   \item \macro{ENOMEM} alcuni indirizzi dell'intervallo specificato non
-    corripondono allo spazio di indirizzi del processo.
+    corrispondono allo spazio di indirizzi del processo.
   \item \macro{EINVAL} \var{len} non è un valore positivo.
   \end{errlist}
 \end{functions}
@@ -752,9 +754,9 @@ Il parametro \var{flags} di \func{mlockall} permette di controllarne il
 comportamento; esso può essere specificato come l'OR aritmetico delle due
 costanti: 
 \begin{description*}
-\item[\macro{MCL\_CURRENT}] blocca tutte le pagine correntemente mappate nello
+\item \macro{MCL\_CURRENT} blocca tutte le pagine correntemente mappate nello
   spazio di indirizzi del processo.
-\item[\macro{MCL\_FUTURE}] blocca tutte le pagine che saranno mappate nello
+\item \macro{MCL\_FUTURE} blocca tutte le pagine che saranno mappate nello
   spazio di indirizzi del processo.
 \end{description*}
 
@@ -959,7 +961,7 @@ un esempio del contenuto dell'ambiente, in si 
 variabili che normalmente sono definite dal sistema, è riportato in \nfig.
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=11cm]{img/environ_var.eps}
+  \includegraphics[width=11cm]{img/environ_var}
   \caption{Esempio di lista delle variabili di ambiente.}
   \label{fig:proc_envirno_list}
 \end{figure}
@@ -967,7 +969,7 @@ variabili che normalmente sono definite dal sistema, 
 Per convenzione le stringhe che definiscono l'ambiente sono tutte del tipo
 \textsl{\texttt{nome=valore}}. Inoltre alcune variabili, come quelle elencate
 in \curfig, sono definite dal sistema per essere usate da diversi programmi e
-funzioni: per queste c'è l'ulteriore convezione di usare nomi espressi in
+funzioni: per queste c'è l'ulteriore convenzione di usare nomi espressi in
 caratteri maiuscoli.
 
 Il kernel non usa mai queste variabili, il loro uso e la loro interpretazione è
@@ -985,8 +987,46 @@ l'editor preferito da invocare in caso di necessit
 
 Gli standard POSIX e XPG3 definiscono alcune di queste variabili (le più
 comuni), come riportato in \ntab. GNU/Linux le supporta tutte e ne definisce
-anche altre: per una lista parziale si può controllare \cmd{man environ}.
+anche altre: per una lista più completa si può controllare \cmd{man environ}.
 
+\begin{table}[htb]
+  \centering
+  \begin{tabular}[c]{|l|c|c|c|p{6cm}|}
+    \hline
+    \textbf{Variabile} & POSIX & XPG & Linux & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \macro{USER} & $\bullet$ & $\bullet$ & $\bullet$ & Nome utente\\
+    \macro{LOGNAME} & $\bullet$ & $\bullet$ & $\bullet$ & Nome utente\\
+    \macro{HOME} & $\bullet$ & $\bullet$ & $\bullet$ & 
+    Directory base dell'utente\\
+    \macro{LANG} & $\bullet$ & $\bullet$ & $\bullet$ & Localizzazione\\
+    \macro{PATH} & $\bullet$ & $\bullet$ & $\bullet$ & Elenco delle directory
+    dei programmi\\
+    \macro{PWD} & $\bullet$ & $\bullet$ & $\bullet$ & Directory corrente\\
+    \macro{SHELL} & $\bullet$ & $\bullet$ & $\bullet$ & Shell in uso\\
+    \macro{TERM} & $\bullet$ & $\bullet$ & $\bullet$ & Tipo di terminale\\
+    \macro{PAGER} & $\bullet$ & $\bullet$ & $\bullet$ & Programma per vedere i
+    testi\\
+    \macro{EDITOR} & $\bullet$ & $\bullet$ & $\bullet$ & Editor di default\\
+    \macro{BROWSER} & $\bullet$ & $\bullet$ & $\bullet$ & Browser di default\\
+    \hline
+  \end{tabular}
+  \caption{Variabile di ambiente più comuni definite da vari standard}
+  \label{tab:proc_env_var}
+\end{table}
+
+Lo standard ANSI C, pur lasciando alle varie implementazioni i contenuti,
+definisce la funzione \func{getenv} che permetta di ottenere i valori delle
+variabili di ambiente, il suo prototipo è:
+
+\begin{prototype}{stdlib.h}{char *getenv(const char *name)}
+  Esamina l'ambiente del processo cercando una stringa che corrisponda a
+  quella specificata da \param{name}. 
+  
+  La funzione \macro{NULL} se non trova nulla, o il puntatore alla stringa che
+  corrisponde (di solito nella forma \texttt{NOME=valore}).
+\end{prototype}
 
 
 
@@ -1071,6 +1111,27 @@ efficiente, quello dell'uscita in caso di errore.
 
 Il C però non consente di effettuare un salto ad una label definita in
 un'altra funzione, per cui se l'errore avviene in funzioni profondamente
-annidate occorre usare la funzione \func{longjump}. 
+annidate occorre usare la funzioni \func{setjmp} e \func{longjmp}, il cui
+prototipo è:
+\begin{functions}
+  \headdecl{setjmp.h}
+  \funcdecl{void setjmp(jmp\_buf env)}
+  
+  La funzione salva il contesto dello stack in \param{env} per un successivo
+  uso da parte di \func{longjmp}. Il contesto viene invalidato se la routine
+  che ha chiamato \func{setjmp} ritorna.
+  
+  La funzione ritorna zero quando è chiamata direttamente e un valore diverso
+  da zero quando ritorna da una chiamata di \func{longjmp} che usa il contesto
+  salvato in precedenza.
 
+  \funcdecl{void longjmp(jmp\_buf env, int val)}
+  
+  Ripristina il contesto dello stack salvato dall'ultima chiamata di
+  \func{setjmp} con l'argomento \param{env}. Il programma prosegue dal ritorno
+  di \func{setjmp} con un valore \param{val}. Il valore di \param{val} deve
+  essere diverso da zero, se viene specificato 0 sarà usato 1 al suo posto.
+
+  La funzione non ritorna.
+\end{functions}