operazione.
Le \acr{glibc} hanno un'implementazione delle funzioni di allocazione che è
-controllabile dall'utente attraverso alcune variabili di ambiente, in
-particolare diventa possibile tracciare questo tipo di errori usando la
-variabile di ambiente \val{MALLOC\_CHECK\_} che quando viene definita mette in
-uso una versione meno efficiente delle funzioni suddette, che però è più
-tollerante nei confronti di piccoli errori come quello di chiamate doppie a
-\func{free}. In particolare:
+controllabile dall'utente attraverso alcune variabili di ambiente (vedi
+sez.~\ref{sec:proc_environ}), in particolare diventa possibile tracciare
+questo tipo di errori usando la variabile di ambiente \val{MALLOC\_CHECK\_}
+che quando viene definita mette in uso una versione meno efficiente delle
+funzioni suddette, che però è più tollerante nei confronti di piccoli errori
+come quello di chiamate doppie a \func{free}. In 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}
funzionalità di ausilio presenti nelle \acr{glibc} in
sez.~\ref{sec:proc_memory_adv_management}.
-Una possibile alternativa all'uso di \func{malloc}, che non soffre dei
-problemi di \itindex{memory~leak} \textit{memory leak} descritti in
-precedenza, è la funzione \funcd{alloca}, che invece di allocare la memoria
-nello \itindex{heap} \textit{heap} usa il segmento di \itindex{stack}
-\textit{stack} della funzione corrente. La sintassi è identica a quella di
-\func{malloc}, il suo prototipo è:
+Una possibile alternativa all'uso di \func{malloc}, per evitare di soffrire
+dei problemi di \itindex{memory~leak} \textit{memory leak} descritti in
+precedenza, è di allocare la memoria nel segmento di \itindex{stack}
+\textit{stack} della funzione corrente invece che nello \itindex{heap}
+\textit{heap}, per farlo si può usare la funzione \funcd{alloca}, la cui
+sintassi è identica a quella di \func{malloc}; il suo prototipo è:
\begin{prototype}{stdlib.h}{void *alloca(size\_t size)}
Alloca \param{size} byte nello \textit{stack}.
classici \itindex{memory~leak} \textit{memory leak}.
Una prima funzionalità di ausilio nella ricerca di questi errori viene fornita
-dalla \acr{glibc} tramite l'uso della variabile di ambiente (vedi
-sez.~\ref{sec:proc_environ}) \var{MALLOC\_CHECK\_}. Quando questa viene
-definita al posto della versione ordinaria delle funzioni di allocazione
-(\func{malloc}, \func{calloc}, \func{realloc}, e \func{free}) viene usata una
-versione meno efficiente ma in grado di rilevare (e tollerare) alcuni degli
-errori più semplici, come le doppie chiamate a \func{free} o i
-\itindex{buffer~overrun} \textit{buffer overrun} di un byte.\footnote{uno
- degli errori più comuni, causato ad esempio dalla scrittura di una stringa
- di dimensione pari a quella del buffer, in cui ci si dimentica dello zero di
- terminazione finale.}
+dalla \acr{glibc} tramite l'uso della variabile di ambiente
+\var{MALLOC\_CHECK\_}. Quando questa viene definita al posto della versione
+ordinaria delle funzioni di allocazione (\func{malloc}, \func{calloc},
+\func{realloc}, e \func{free}) viene usata una versione meno efficiente ma in
+grado di rilevare (e tollerare) alcuni degli errori più semplici, come le
+doppie chiamate a \func{free} o i \itindex{buffer~overrun} \textit{buffer
+ overrun} di un byte.\footnote{uno degli errori più comuni, causato ad
+ esempio dalla scrittura di una stringa di dimensione pari a quella del
+ buffer, in cui ci si dimentica dello zero di terminazione finale.}
In questo caso a seconda del valore assegnato a \var{MALLOC\_CHECK\_} si
avranno diversi comportamenti: con 0 l'errore sarà ignorato, con 1 verrà
% a sostituire mallinfo, vedi http://udrepper.livejournal.com/20948.html
-\section{Argomenti, opzioni ed ambiente di un processo}
+\section{Argomenti, ambiente ed altre proprietà di un processo}
\label{sec:proc_options}
-Tutti i programmi hanno la possibilità di ricevere argomenti e opzioni quando
-vengono lanciati. Il passaggio degli argomenti è effettuato attraverso gli
-argomenti \param{argc} e \param{argv} della funzione \func{main}, che vengono
-passati al programma dalla shell (o dal processo che esegue la \func{exec},
-secondo le modalità che vedremo in sez.~\ref{sec:proc_exec}) quando questo
-viene messo in esecuzione.
-
-Oltre al passaggio degli argomenti, 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{variabili di ambiente}). In questa sezione esamineremo le funzioni che
-permettono di gestire argomenti ed opzioni, e quelle che consentono di
-manipolare ed utilizzare le variabili di ambiente. Accenneremo infine alle
-modalità con cui si può gestire la localizzazione di un programma
-modificandone il comportamento a seconda della lingua o del paese a cui si
-vuole faccia riferimento nelle sue operazioni.
+In questa sezione esamineremo le funzioni che permettono di gestire gli
+argomenti e le opzioni, e quelle che consentono di manipolare ed utilizzare le
+variabili di ambiente. Accenneremo infine alle modalità con cui si può gestire
+la localizzazione di un programma modificandone il comportamento a seconda
+della lingua o del paese a cui si vuole faccia riferimento nelle sue
+operazioni.
\subsection{Il formato degli argomenti}
\label{sec:proc_par_format}
-In genere il passaggio degli argomenti ad un programma viene effettuato dalla
-shell, che si incarica di leggere la linea di comando e di effettuarne la
-scansione (il cosiddetto \textit{parsing}) per individuare le parole che la
-compongono, ciascuna delle quali viene considerata un argomento. Di norma per
-individuare le parole che andranno a costituire la lista degli argomenti viene
-usato come carattere di separazione lo spazio o il tabulatore, ma la cosa
-dipende ovviamente dalle modalità con cui si effettua il lancio.
+Tutti i programmi hanno la possibilità di ricevere argomenti e opzioni quando
+vengono lanciati. Il passaggio degli argomenti e delle opzioni è effettuato
+attraverso gli argomenti \param{argc} e \param{argv} della funzione
+\func{main}, che vengono passati al programma dalla shell (o dal processo che
+esegue la \func{exec}, secondo le modalità che vedremo in
+sez.~\ref{sec:proc_exec}) quando questo viene messo in esecuzione.
+
+In genere il passaggio di argomenti ed opzioni ad un programma viene
+effettuato dalla shell, che si incarica di leggere la linea di comando e di
+effettuarne la scansione (il cosiddetto \textit{parsing}) per individuare le
+parole che la compongono, ciascuna delle quali potrà essere considerata un
+argomento o un'opzione. Di norma per individuare le parole che andranno a
+costituire la lista degli argomenti viene usato come carattere di separazione
+lo spazio o il tabulatore, ma la cosa dipende ovviamente dalle modalità con
+cui si effettua la scansione.
\begin{figure}[htb]
\centering
Indipendentemente da come viene eseguita, il risultato della scansione deve
essere la costruzione del vettore di puntatori \param{argv} in cui si devono
-inserire in successione i puntatori alle stringhe costituenti i vari
-argomenti, e della variabile \param{argc} che deve essere inizializzata al
-numero di argomenti trovati. Nel caso della shell questo comporta che il primo
+inserire in successione i puntatori alle stringhe costituenti i vari argomenti
+ed opzioni, e della variabile \param{argc} che deve essere inizializzata al
+numero di stringhe passate. Nel caso della shell questo comporta che il primo
argomento sia sempre il nome del programma; un esempio di questo meccanismo è
mostrato in fig.~\ref{fig:proc_argv_argc}.
\subsection{Le variabili di ambiente}
\label{sec:proc_environ}
-Oltre agli argomenti passati a linea di comando ogni processo riceve dal
-sistema un \textsl{ambiente}, nella forma di una lista di variabili (detta
-\textit{environment list}) messa a disposizione dal processo, e costruita
-nella chiamata alla funzione \func{exec} quando questo viene lanciato.
-
-Come per la lista degli argomenti anche questa lista è un vettore di puntatori
-a caratteri, ciascuno dei quali punta ad una stringa, terminata da un
+Oltre agli argomenti passati a linea di comando esiste un'altra modalità che
+permette di trasferire ad un processo delle informazioni in modo da
+modificarne il comportamento. Ogni processo infatti riceve dal sistema, oltre
+alle variabili \param{argv} e \param{argc} anche un \textsl{ambiente} (in
+inglese \textit{environment}); questo viene espresso nella forma di una lista
+(chiamata \textit{environment list}) delle cosiddette \textsl{variabili di
+ ambiente}, i valori di queste variabili possono essere poi usati dal
+programma.
+
+Anche in questo caso la lista delle \textsl{variabili di ambiente} deve essere
+costruita ed utilizzata nella chiamata alla funzione \func{exec} (torneremo su
+questo in sez.~\ref{sec:proc_exec}) quando questo viene lanciato. Come per la
+lista degli argomenti anche questa lista è un vettore di puntatori a
+caratteri, ciascuno dei quali punta ad una stringa, terminata da un
\val{NULL}. A differenza di \code{argv[]} in questo caso non si ha una
lunghezza del vettore data da un equivalente di \param{argc}, ma la lista è
terminata da un puntatore nullo.
% TODO trattare, quando ci sarà tempo, setlocale ed il resto
+
%\subsection{Opzioni in formato esteso}
%\label{sec:proc_opt_extended}