X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=8c7dc49d7655ad0a5cb1e4e4b1a1ed75e21f4198;hp=c7c6756c22454091f1059b18659e8e1273ce2fac;hb=94b4d603807121b40eef06d22d2b6cd6e06ec7fd;hpb=922de35645e21550b70e2e5fe5ced103a0d2e0b4 diff --git a/process.tex b/process.tex index c7c6756..8c7dc49 100644 --- a/process.tex +++ b/process.tex @@ -378,7 +378,7 @@ standard ANSI C, è quella che deve essere invocata per una terminazione La funzione è pensata per eseguire una conclusione pulita di un programma che usi la libreria standard del C; essa esegue tutte le funzioni che sono state registrate con \func{atexit} e \func{on\_exit} (vedi -sez.~\ref{sec:proc_atexit}), chiude tutti i \textit{file stream} (vedi +sez.~\ref{sec:proc_atexit}), chiude tutti gli \textit{stream} (vedi sez.~\ref{sec:file_stream}) effettuando il salvataggio dei dati sospesi (chiamando \func{fclose}, vedi sez.~\ref{sec:file_fopen}), infine passa il controllo al kernel chiamando la \textit{system call} \func{\_exit} (che @@ -442,8 +442,8 @@ concludendo immediatamente il processo, il suo prototipo è: La funzione termina immediatamente il processo e le eventuali funzioni registrate con \func{atexit} e \func{on\_exit} non vengono eseguite. La funzione chiude tutti i file descriptor appartenenti al processo, cosa che -però non comporta il salvataggio dei dati eventualmente presenti nei buffer di -\textit{file stream}, (torneremo sulle due interfacce dei file in +però non comporta il salvataggio dei dati eventualmente presenti nei buffer +degli \textit{stream}, (torneremo sulle due interfacce dei file in cap.~\ref{cha:files_std_interface} e cap.~\ref{cha:file_unix_interface})). Infine fa sì che ogni figlio del processo sia adottato da \cmd{init} (vedi sez.~\ref{sec:proc_termination}), @@ -524,11 +524,11 @@ di esecuzione sarà riferito alla registrazione in quanto tale, indipendentemente dalla funzione usata per farla. Una volta completata l'esecuzione di tutte le funzioni registrate verranno -chiusi tutti i \textit{file stream} aperti ed infine verrà chiamata -\func{\_exit} per la terminazione del programma. Questa è la sequenza -ordinaria, eseguita a meno che una delle funzioni registrate non esegua al suo -interno \func{\_exit}, nel qual caso la terminazione del programma sarà -immediata ed anche le successive funzioni registrate non saranno invocate. +chiusi tutti gli \textit{stream} aperti ed infine verrà chiamata \func{\_exit} +per la terminazione del programma. Questa è la sequenza ordinaria, eseguita a +meno che una delle funzioni registrate non esegua al suo interno +\func{\_exit}, nel qual caso la terminazione del programma sarà immediata ed +anche le successive funzioni registrate non saranno invocate. Se invece all'interno di una delle funzioni registrate si chiama un'altra volta \func{exit} lo standard POSIX.1-2001 prescrive un comportamento @@ -904,7 +904,7 @@ rispettivi prototipi sono: } {Entrambe le funzioni restituiscono il puntatore alla zona di memoria allocata in caso di successo e \val{NULL} in caso di fallimento, nel qual caso - \var{errno} assumerà il valore \errval{ENOMEM}.} + \var{errno} assumerà il valore \errcode{ENOMEM}.} \end{funcproto} In genere si usano \func{malloc} e \func{calloc} per allocare dinamicamente @@ -968,7 +968,7 @@ suo prototipo è: \fdesc{Cambia la dimensione di un'area di memoria precedentemente allocata.} } {La funzione ritorna il puntatore alla zona di memoria allocata in caso di successo e \val{NULL} per un errore, nel qual caso \var{errno} - assumerà il valore \errval{ENOMEM}.} + assumerà il valore \errcode{ENOMEM}.} \end{funcproto} La funzione vuole come primo argomento il puntatore restituito da una @@ -1155,7 +1155,7 @@ prototipo è: \fdesc{Sposta la fine del segmento dati del processo.} } {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, - nel qual caso \var{errno} assumerà il valore \errval{ENOMEM}.} + nel qual caso \var{errno} assumerà il valore \errcode{ENOMEM}.} \end{funcproto} La funzione è un'interfaccia all'omonima \textit{system call} ed imposta @@ -1186,7 +1186,7 @@ Una seconda funzione per la manipolazione diretta delle dimensioni } {La funzione ritorna il puntatore all'inizio della nuova zona di memoria allocata in caso di successo e \val{NULL} per un errore, nel qual - caso \var{errno} assumerà il valore \errval{ENOMEM}.} + caso \var{errno} assumerà il valore \errcode{ENOMEM}.} \end{funcproto} La funzione incrementa la dimensione dello \itindex{heap} \textit{heap} di un @@ -2302,12 +2302,14 @@ usando variabili globali o dichiarate come \direct{extern},\footnote{la \subsection{Il passaggio di un numero variabile di argomenti} \label{sec:proc_variadic} +\index{funzioni!variadic|(} + Come vedremo nei capitoli successivi, non sempre è possibile specificare un numero fisso di argomenti per una funzione. Lo standard ISO C prevede nella -sua sintassi la possibilità di definire delle \index{variadic} -\textit{variadic function} che abbiano un numero variabile di argomenti, -attraverso l'uso nella dichiarazione della funzione dello speciale costrutto -``\texttt{...}'', che viene chiamato \textit{ellipsis}. +sua sintassi la possibilità di definire delle \textit{variadic function} che +abbiano un numero variabile di argomenti, attraverso l'uso nella dichiarazione +della funzione dello speciale costrutto ``\texttt{...}'', che viene chiamato +\textit{ellipsis}. Lo standard però non provvede a livello di linguaggio alcun meccanismo con cui dette funzioni possono accedere ai loro argomenti. L'accesso viene pertanto @@ -2323,11 +2325,11 @@ adeguati. L'uso di una \textit{variadic function} prevede quindi tre punti: a seguire quelli addizionali. \end{itemize*} -Lo standard ISO C prevede che una \index{variadic} \textit{variadic function} -abbia sempre almeno un argomento fisso. Prima di effettuare la dichiarazione -deve essere incluso l'apposito \textit{header file} \file{stdarg.h}; un -esempio di dichiarazione è il prototipo della funzione \func{execl} che -vedremo in sez.~\ref{sec:proc_exec}: +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 \textit{header file} \file{stdarg.h}; un esempio di +dichiarazione è il prototipo della funzione \func{execl} che vedremo in +sez.~\ref{sec:proc_exec}: \includecodesnip{listati/exec_sample.c} in questo caso la funzione prende due argomenti fissi ed un numero variabile di altri argomenti, che andranno a costituire gli elementi successivi al primo @@ -2515,6 +2517,7 @@ valore speciale per l'ultimo argomento, come fa ad esempio \func{execl} che usa un puntatore \val{NULL} per indicare la fine della lista degli argomenti (vedi sez.~\ref{sec:proc_exec}). +\index{funzioni!variadic|)} \subsection{Il controllo di flusso non locale} \label{sec:proc_longjmp}