\label{sec:proc_conclusion}
Normalmente un programma finisce è quando la funzione \func{main} ritorna, una
-modalità equivalente di concludere il programma è quella di chiamare
+modalità equivalente di chiudere il programma è quella di chiamare
direttamente la funzione \func{exit} (che viene comunque chiamata
automaticamente quando \func{main} ritorna). Una forma alternativa è quella
di chiamare direttamente la system call \func{\_exit}, che restituisce il
Il valore di ritorno della funzione \func{main}, o quello usato nelle chiamate
ad \func{exit} e \func{\_exit}, viene chiamato \textsl{stato di uscita} (o
-\textit{exit status}) e passato al processo padre che aveva lanciato il
-programma (in genere la shell). In generale si usa questo valore per fornire
+\textit{exit status}) e passato al processo che aveva lanciato il programma
+(in genere la shell). In generale si usa questo valore per fornire
informazioni sulla riuscita o il fallimento del programma; l'informazione è
necessariamente generica, ed il valore deve essere compreso fra 0 e 255.
\end{prototype}
\noindent la funzione richiede come argomento l'indirizzo della opportuna
funzione di pulizia da chiamare all'uscita, che non deve prendere argomenti e
-non deve ritornare niente (deve essere essere cioè definita come \func{void
+non deve ritornare niente (deve essere essere cioè definita come \code{void
function(void)}).
Una estensione di \func{atexit} è la funzione \func{on\_exit}, che le
\end{itemize*}
Il problema più comune e più difficile da risolvere che si incontra con le
-routines di allocazione è quando non viene opportunamente liberata la memoria
+routine di allocazione è quando non viene opportunamente liberata la memoria
non più utilizzata, quello che in inglese viene chiamato \textit{memory-leak},
(cioè \textsl{perdita di memoria}).
automaticamente al ritorno della funzione.
Come è evidente questa funzione ha molti vantaggi, anzitutto permette di
-evitare alla readice i problemi di memory leak, dato che non serve più la
+evitare alla radice i problemi di memory leak, dato che non serve più la
deallocazione esplicita; inoltre la deallocazione automatica funziona anche
quando si usa \func{longjmp} per uscire da una subroutine con un salto non
locale da una funzione (vedi \secref{sec:proc_longjmp}).
Oltre al passaggio dei parametri, un'altra modalità che permette di passare
delle informazioni che modifichino il comportamento di un programma è quello
dell'uso del cosiddetto \textit{environment} (cioè l'uso delle
-\textsl{varibili di ambiente}). In questa sezione esamineremo le funzioni che
+\textsl{variabili di ambiente}). In questa sezione esamineremo le funzioni che
permettono di gestire parametri e opzioni, e quelle che consentono di
-manipolare ed utilizzare le varibili di ambiente.
+manipolare ed utilizzare le variabili di ambiente.
\subsection{Il formato dei parametri}
\cmd{-m}).
Per gestire le opzioni all'interno dei argomenti a linea di comando passati in
-\func{argv} le librerie standard del C forniscono la funzione \func{getopt}
+\var{argv} le librerie standard del C forniscono la funzione \func{getopt}
che ha il seguente prototipo:
\begin{prototype}{unistd.h}
-{int getopt(int argc, char * const argv[], const char * optstring)}
+{int getopt(int argc, char *const argv[], const char *optstring)}
Esegue il parsing degli argomenti passati da linea di comando
riconoscendo le possibili opzioni segnalate con \var{optstring}.
Quando la funzione trova un'opzione essa ritorna il valore numerico del
carattere, in questo modo si possono eseguire azioni specifiche usando uno
-\func{switch}; \func{getopt} inoltre inizializza alcune variabili globali:
+\code{switch}; \func{getopt} inoltre inizializza alcune variabili globali:
\begin{itemize*}
-\item \var{char * optarg} contiene il puntatore alla stringa parametro
+\item \var{char *optarg} contiene il puntatore alla stringa parametro
dell'opzione.
\item \var{int optind} alla fine della scansione restituisce l'indice del
primo elemento di \var{argv} che non è un'opzione.
restituita da \func{getenv}, e sempre nella forma \var{NOME=valore}. Se la
variabile specificata non esiste la stringa sarà aggiunta all'ambiente, se
invece esiste il suo valore sarà settato a quello specificato da
-\func{string}. Si tenga presente che, seguendo lo standard SUSv2, le
+\param{string}. Si tenga presente che, seguendo lo standard SUSv2, le
\acr{glibc} successive alla versione 2.1.2 aggiungono\footnote{il
comportamento è lo stesso delle vecchie \acr{libc4} e \acr{libc5}; nelle
\acr{glibc}, dalla versione 2.0 alla 2.1.1, veniva invece fatta una copia,
Si tenga infine presente che se si passa a \func{putenv} solo il nome di una
variabile (cioè \param{string} è nella forma \texttt{NAME} e non contiene un
-\var{=}) allora questa viene cancellata dall'ambiente. Infine se la chiamata
+\texttt{=}) allora questa viene cancellata dall'ambiente. Infine se la chiamata
di \func{putenv} comporta la necessità di allocare una nuova versione del
vettore \var{environ} questo sarà allocato, ma la versione corrente sarà
deallocata solo se anch'essa è risultante da una allocazione fatta in
eseguire la copia di un puntatore alla lista degli argomenti:
\begin{prototype}{stdarg.h}{void va\_copy(va\_list dest, va\_list src)}
Copia l'attuale valore \param{src} del puntatore alla lista degli argomenti
- su \param{desc}.
+ su \param{dest}.
\end{prototype}
\noindent anche in questo caso è buona norma chiudere ogni esecuzione di una
\macro{va\_copy} con una corrispondente \macro{va\_end} sul nuovo puntatore
che siano fissi sia che siano opzionali (alcuni sistemi trattano diversamente
gli opzionali), ma dato che il prototipo non può specificare il tipo degli
argomenti opzionali, questi verranno sempre promossi, pertanto nella ricezione
-dei medesimi ocoorrerà tenerne conto (ad esempio un \type{char} verrà visto da
+dei medesimi occorrerà tenerne conto (ad esempio un \type{char} verrà visto da
\macro{va\_arg} come \type{int}).
Per questo una delle regole fondamentali della programmazione in C è che
all'uscita di una funzione non deve restare nessun riferimento alle variabili
-locali; qualora sia necessirio utilizzare variabili che possano essere viste
+locali; qualora sia necessario utilizzare variabili che possano essere viste
anche dalla funzione chiamante queste devono essere allocate esplicitamente, o
in maniera statica (usando variabili di tipo \type{static} o \type{extern}), o
dinamicamente con una delle funzioni della famiglia \func{malloc}.
Il controllo del flusso di un programma in genere viene effettuato con le
varie istruzioni del linguaggio C, la più bistrattata delle quali è il
-\func{goto}, ampiamente deprecato in favore di costrutti più puliti; esiste
+\code{goto}, ampiamente deprecato in favore di costrutti più puliti; esiste
però un caso in l'uso di questa istruzione porta all'implementazione più
efficiente, quello dell'uscita in caso di errore.
\bodydesc{La funzione non ritorna.}
\end{functions}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: