X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=c798a105dbdf17ce770a8ac5d7a06662f9fdc8bb;hp=d436a4fa963e55375a4a207fd6b2a6c87b67ac54;hb=4ad4523de32d786ae4c24ef157bd4b8fe4aac534;hpb=c6bb1ae340cad082718e43163b9595608ed123e1 diff --git a/process.tex b/process.tex index d436a4f..c798a10 100644 --- a/process.tex +++ b/process.tex @@ -438,13 +438,13 @@ quattro, i prototipi sono i seguenti: \begin{functions} \headdecl{stdlib.h} \funcdecl{void *calloc(size\_t size)} - Alloca \var{size} bytes nello heap. La memoria viene inizializzata a 0. + Alloca \var{size} byte nello heap. La memoria viene inizializzata a 0. La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e \macro{NULL} in caso di fallimento, nel qual caso \var{errno} viene settata a \macro{ENOMEM}. \funcdecl{void *malloc(size\_t size)} - Alloca \var{size} bytes nello heap. La memoria non viene inizializzata. + Alloca \var{size} byte nello heap. La memoria non viene inizializzata. La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e \macro{NULL} in caso di fallimento, nel qual caso @@ -474,7 +474,7 @@ allocazione. La memoria allocata dinamicamente deve essere esplicitamente rilasciata usando \func{free}\footnote{le glibc provvedono anche una funzione \func{cfree} - defininita per compatibilità con SunOS, che è deprecata} una volta che non + definita per compatibilità con SunOS, che è deprecata} una volta che non sia più necessaria. Questa funzione vuole come parametro un puntatore restituito da una precedente chiamata a una qualunque delle funzioni di allocazione e che non sia già stato liberato da un'altra chiamata a @@ -484,13 +484,13 @@ La funzione \func{realloc} si usa invece per cambiare (in genere aumentare) la dimensione di un'area di memoria precedentemente allocata, la funzione vuole in ingresso il puntatore restituito dalla precedente chiamata ad una \func{malloc} (se è passato un valore \macro{NULL} allora la funzione si -comporta come \func{malloc}\footnote{questo è vero per linux e +comporta come \func{malloc}\footnote{questo è vero per Linux e l'implementazione secondo lo standard ANSI C, ma non è vero per alcune vecchie implementazioni, inoltre alcune versioni delle librerie del C consentivano di usare \func{realloc} anche per un puntatore liberato con \func{free} purché non ci fossero state altre chiamate a funzioni di allocazione, questa funzionalità è totalmente deprecata e non è consentita - sotto linux}), ad esempio quando si deve far crescere la dimensione di un + sotto Linux}), ad esempio quando si deve far crescere la dimensione di un vettore; in questo caso se è disponibile dello spazio adiacente al precedente la funzione lo utilizza, altrimenti rialloca altrove un blocco della dimensione voluta copiandoci automaticamente il contenuto, lo spazio in più non viene @@ -552,7 +552,7 @@ di problemi di memory leak descritti in precedenza \texttt{alloca} che invece che allocare la memoria nello heap usa lo il segmento di stack della funzione corrente. La sintassi è identica: \begin{prototype}{stdlib.h}{void *alloca(size\_t size)} - Alloca \texttt{size} bytes nel segmento di stack della funzione chiamante. + Alloca \texttt{size} byte nel segmento di stack della funzione chiamante. La memoria non viene inizializzata. La funzione restituisce il puntatore alla zona di memoria allocata in caso @@ -576,8 +576,8 @@ Gli svantaggi sono che la funzione non non è possibile aumentare le dimensioni dello stack una volta chiamata una funzione e quindi l'uso limita la portabilità dei programmi, inoltre se si cerca di allocare troppa memoria non si ottiene un messaggio di errore, ma un -segnale di \textit{segmentation violation} analogo a quello che si avrebbe da -una ricorsione infinita. +segnale di \textit{segment violation} analogo a quello che si avrebbe da una +ricorsione infinita. Inoltre non è chiaramente possibile usare questa funzione per allocare memoria che deve poi essere usata anche al di fuori della funzione in cui questa viene @@ -690,7 +690,7 @@ che pu Il controllo del flusso di un programma in genere viene effettuato con le varie istruzioni del linguaggio C, la più bistrattata delle quali è il -\texttt{goto}, ampiamente deprecato in favore di costrutti più puliti; esiste +\func{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. @@ -699,6 +699,9 @@ un'altra funzione, per cui se l'errore avviene in funzioni profondamente annidate occorre usare la funzione \func{longjump}. + + + \section{La gestione di parametri e opzioni} \label{sec:proc_options} @@ -744,7 +747,7 @@ prototipo: La funzione esegue il parsing degli argomenti passati da linea di comando riconoscendo le possibili opzioni segnalate con \var{optstring}. -Ritorna il carattere che segue l'opzione, \cmd{:} se manca un paramatro +Ritorna il carattere che segue l'opzione, \cmd{:} se manca un parametro all'opzione, \cmd{?} se l'opzione è sconosciuta, e -1 se non esistono altre opzioni. \end{prototype} @@ -804,7 +807,6 @@ In \nfig\ exit(1); } break; - break; case 'a': /* output file (append) */ out_file=open(optarg,O_WRONLY|O_CREAT|O_APPEND); break; @@ -829,6 +831,7 @@ In \nfig\ \label{fig:proc_options_code} \end{figure} + \subsection{Opzioni in formato esteso} \label{sec:proc_opt_extended} @@ -839,6 +842,7 @@ versione estesa di \func{getopt}. (NdA: da finire). + \subsection{Le variabili di ambiente} \label{sec:proc_environ} @@ -848,7 +852,7 @@ sistema un \textsl{ambiente}, nella forma di una lista di variabili chiamata ad \func{exec} che lo ha lanciato. Come per la lista dei parametri anche questa lista è un array di puntatori a -caratteri, ciascuno dei quali punta ad una stringa (terminata da un null). A +caratteri, ciascuno dei quali punta ad una stringa (terminata da un NULL). A differenza di \var{argv[]} però in questo caso non si ha la lunghezza dell'array dato da un equivalente di \var{argc}, ma la lista è terminata da un puntatore nullo. @@ -873,7 +877,7 @@ Per convenzione le stringhe che definiscono l'ambiente sono tutte del tipo in \curfig, sono definite dal sistema per queste c'è la convezione di usare nomi espressi in caratteri maiuscoli. -Il kernel non usa mai queste variabili, il loro uso e la loro intepretazione è +Il kernel non usa mai queste variabili, il loro uso e la loro interpretazione è riservata alle applicazioni e ad alcune funzioni di libreria; in genere esse costituiscono un modo comodo per definire un comportamento specifico senza dover ricorrere all'uso di opzioni a linea di comando o di file di @@ -888,6 +892,11 @@ 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 parziale si può controllare \cmd{man environ}. + + + + +