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
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}),
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
}
{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
\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
\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
}
{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
\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
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
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}