X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=f29d5e31e1e1844f6c627613e26a342cc437ccbd;hp=5a3e630b84e9030f61e7ba60d8707c0d4fa73f10;hb=613d2f30d1c3ec28c569578a7b7bab23a40e8fea;hpb=9aad56ecd71e4f36e09f001cdd30b2106beec5c4 diff --git a/process.tex b/process.tex index 5a3e630..f29d5e3 100644 --- a/process.tex +++ b/process.tex @@ -815,10 +815,10 @@ prototipi sono: \end{functions} Le due funzioni permettono rispettivamente di bloccare e sbloccare la -paginazione per l'intervallo di memoria specificato dagli argomenti, che ne -indicano nell'ordine l'indirizzo iniziale e la lunghezza. Tutte le pagine che -contengono una parte dell'intervallo bloccato sono mantenute in RAM per tutta -la durata del blocco. +paginazione\index{paginazione} per l'intervallo di memoria specificato dagli +argomenti, che ne indicano nell'ordine l'indirizzo iniziale e la lunghezza. +Tutte le pagine che contengono una parte dell'intervallo bloccato sono +mantenute in RAM per tutta la durata del blocco. Altre due funzioni, \funcd{mlockall} e \funcd{munlockall}, consentono di bloccare genericamente la paginazione\index{paginazione} per l'intero spazio @@ -1330,11 +1330,11 @@ viene usato questo meccanismo. Come vedremo nei capitoli successivi, non sempre è possibile specificare un numero fisso di parametri per una funzione. Lo standard ISO C prevede nella -sua sintassi la possibilità di definire delle \textit{variadic function} che -abbiano un numero variabile di argomenti, attraverso l'uso della -\textit{ellipsis} \code{...} nella dichiarazione della funzione; ma non -provvede a livello di linguaggio alcun meccanismo con cui dette funzioni -possono accedere ai loro argomenti. +sua sintassi la possibilità di definire delle \textit{variadic + function}\index{variadic} che abbiano un numero variabile di argomenti, +attraverso l'uso della \textit{ellipsis} \code{...} nella dichiarazione della +funzione; ma non provvede a livello di linguaggio alcun meccanismo con cui +dette funzioni possono accedere ai loro argomenti. L'accesso viene invece realizzato dalle librerie standard che provvedono gli strumenti adeguati. L'uso delle \textit{variadic function} prevede tre punti: @@ -1348,10 +1348,10 @@ strumenti adeguati. L'uso delle \textit{variadic function} prevede tre punti: a seguire gli addizionali. \end{itemize*} -Lo standard ISO C prevede che una \textit{variadic function} abbia sempre -almeno un argomento fisso; prima di effettuare la dichiarazione deve essere -incluso l'apposito header file \file{stdarg.h}; un esempio di dichiarazione è -il prototipo della funzione \func{execl} che vedremo in +Lo standard ISO C prevede che una \textit{variadic function}\index{variadic} +abbia sempre almeno un argomento fisso; prima di effettuare la dichiarazione +deve essere incluso l'apposito header file \file{stdarg.h}; un esempio di +dichiarazione è il prototipo della funzione \func{execl} che vedremo in \secref{sec:proc_exec}: \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} int execl(const char *path, const char *arg, ...); @@ -1437,12 +1437,13 @@ stack all'indirizzo dove sono stati salvati i parametri, normale pensare di poter effettuare questa operazione. In generale però possono esistere anche realizzazioni diverse, per questo -motivo \macro{va\_list} è definito come \textsl{tipo opaco} e non può essere -assegnato direttamente ad un'altra variabile dello stesso tipo. Per risolvere -questo problema lo standard ISO C99\footnote{alcuni sistemi che non hanno - questa macro provvedono al suo posto \macro{\_\_va\_copy} che era il nome - proposto in una bozza dello standard.} ha previsto una macro ulteriore che -permette di eseguire la copia di un puntatore alla lista degli argomenti: +motivo \macro{va\_list} è definito come \textsl{tipo opaco}\index{tipo opaco} +e non può essere assegnato direttamente ad un'altra variabile dello stesso +tipo. Per risolvere questo problema lo standard ISO C99\footnote{alcuni + sistemi che non hanno questa macro provvedono al suo posto + \macro{\_\_va\_copy} che era il nome proposto in una bozza dello standard.} +ha previsto una macro ulteriore che permette di 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{dest}. @@ -1548,7 +1549,12 @@ salvare il contesto dello stack \end{functions} Quando si esegue la funzione il contesto corrente dello stack viene salvato -nell'argomento \param{env}, una variabile di tipo \type{jmp\_buf} che deve +nell'argomento \param{env}, una variabile di tipo +\type{jmp\_buf}\footnote{questo è un classico esempio di variabile di + \textsl{tipo opaco}\index{tipo!opaco}. Si definiscono così strutture ed + altri oggetti usati da una libreria, la cui struttura interna non deve + essere vista dal programma chiamante (da cui il nome) che li devono + utilizzare solo attraverso dalle opportune funzioni di gestione.} che deve essere stata definita in precedenza. In genere le variabili di tipo \type{jmp\_buf} vengono definite come variabili globali in modo da poter essere viste in tutte le funzioni del programma.