Risistemazione argomenti, opzioni ed ambiente e predisposizione prctl
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 29 Sep 2009 22:12:19 +0000 (22:12 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 29 Sep 2009 22:12:19 +0000 (22:12 +0000)
process.tex
system.tex

index eeebf6c10d4e24cd77c8edca7330457e2148fbb8..aa75ea30a8bc4f42c122fd9f715ebfb181e99e6e 100644 (file)
@@ -619,12 +619,12 @@ che, quando l'argomento 
 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}
@@ -693,12 +693,12 @@ molto complesse riguardo l'allocazione della memoria. Vedremo alcune delle
 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}.
   
@@ -1138,16 +1138,15 @@ oltre le dimensioni della sua allocazione,\footnote{entrambe queste operazioni
 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à
@@ -1239,37 +1238,35 @@ controllo non 
 % 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
@@ -1281,9 +1278,9 @@ dipende ovviamente dalle modalit
 
 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}.
 
@@ -1394,13 +1391,20 @@ vettore \param{argv}.
 \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.
@@ -1646,6 +1650,7 @@ In realt
 
 % TODO trattare, quando ci sarà tempo, setlocale ed il resto
 
+
 %\subsection{Opzioni in formato esteso}
 %\label{sec:proc_opt_extended}
 
index 96c100392c3b532f47bf2ea57e01715716669818..74f21c32b8310b68d755ac56961e7bf077e96329 100644 (file)
@@ -559,6 +559,7 @@ lettura.  Affronteremo questi argomenti in questa sezione, insieme alle
 funzioni che si usano per il controllo di altre caratteristiche generali del
 sistema, come quelle per la gestione dei filesystem e di utenti e gruppi.
 
+% TODO ristrutturare e aggiungere \func{prctl}
 
 \subsection{La funzione \func{sysctl} ed il filesystem \file{/proc}}
 \label{sec:sys_sysctl}