X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=a574eb3bca402bdd43b1c709a53a5b1f1cad6d73;hp=f616206895875a0483c740447ed167e6f10f8def;hb=aad74b105a8ff157f0d4420668f1182d8a356615;hpb=8afc898ae5530e3ef1073505c894bb1b738ec916 diff --git a/process.tex b/process.tex index f616206..a574eb3 100644 --- a/process.tex +++ b/process.tex @@ -64,7 +64,7 @@ se si vogliono scrivere programmi portabili \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 @@ -77,8 +77,8 @@ torneremo su questo in \secref{sec:proc_termination}. 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. @@ -179,7 +179,7 @@ pu \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 @@ -533,7 +533,7 @@ particolare: \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}). @@ -576,7 +576,7 @@ non esiste un analogo della \func{free}) in quanto essa viene rilasciata 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}). @@ -796,9 +796,9 @@ messo in esecuzione. 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} @@ -841,10 +841,10 @@ ed \cmd{-m} e la prima vuole un parametro mentre la seconda no \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}. @@ -912,9 +912,9 @@ elementi di \var{argv} che cominciano con il carattere \texttt{'-'}. 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. @@ -1128,7 +1128,7 @@ La seconda funzione prende come parametro una stringa analoga quella 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, @@ -1143,7 +1143,7 @@ questa funzione una variabile automatica (per evitare i problemi esposti in 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 @@ -1325,7 +1325,7 @@ problema lo standard ISO C99\footnote{alcuni sistemi che non hanno questa 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 @@ -1341,7 +1341,7 @@ In Linux gli argomenti dello stesso tipo sono passati allo stesso modo, sia 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}). @@ -1373,7 +1373,7 @@ sovrascrittura dei dati. 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}. @@ -1383,7 +1383,7 @@ 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. @@ -1425,3 +1425,8 @@ suo prototipo \bodydesc{La funzione non ritorna.} \end{functions} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "gapil" +%%% End: