X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=process.tex;h=0a5f18d571269c66462c73eb1b8c096362145231;hb=1351fcd88ac4db6a4350bd7c3dfdc7e74ab461aa;hp=7c104bc36ffa6df64c51f1e217b14b773de7e3b5;hpb=85e7b3ed7aafdb66a7feda150f68649915a5e85d;p=gapil.git diff --git a/process.tex b/process.tex index 7c104bc..0a5f18d 100644 --- a/process.tex +++ b/process.tex @@ -151,13 +151,14 @@ non vengono salvati e le eventuali funzioni registrate con \func{atexit} e \bodydesc{La funzione non ritorna. Il processo viene terminato.} \end{prototype} -La funzione chiude tutti i file descriptor appartenenti al processo (si tenga +La funzione chiude tutti i file descriptor appartenenti al processo; si tenga presente che questo non comporta il salvataggio dei dati bufferizzati degli -stream), fa sì che ogni figlio del processo sia adottato da \cmd{init} (vedi -cap.~\ref{cha:process_handling}), manda un segnale \const{SIGCHLD} al processo -padre (vedi sez.~\ref{sec:sig_job_control}) ed infine ritorna lo stato di -uscita specificato in \param{status} che può essere raccolto usando la -funzione \func{wait} (vedi sez.~\ref{sec:proc_wait}). +stream, (torneremo sulle due interfacce dei file a partire da +cap.~\ref{cha:file_intro}), fa sì che ogni figlio del processo sia adottato da +\cmd{init} (vedi cap.~\ref{cha:process_handling}), manda un segnale +\const{SIGCHLD} al processo padre (vedi sez.~\ref{sec:sig_job_control}) ed +infine ritorna lo stato di uscita specificato in \param{status} che può essere +raccolto usando la funzione \func{wait} (vedi sez.~\ref{sec:proc_wait}). \subsection{Le funzioni \func{atexit} e \func{on\_exit}} @@ -1399,7 +1400,8 @@ lunghezza del vettore data da un equivalente di \param{argc}, ma la lista terminata da un puntatore nullo. L'indirizzo della lista delle variabili di ambiente è passato attraverso la -variabile globale \var{environ}, a cui si può accedere attraverso una semplice +variabile globale \var{environ}, che viene definita automaticamente per +cisascun processo, e a cui si può accedere attraverso una semplice dichiarazione del tipo: \includecodesnip{listati/env_ptr.c} un esempio della struttura di questa lista, contenente alcune delle variabili @@ -1407,7 +1409,7 @@ pi fig.~\ref{fig:proc_envirno_list}. \begin{figure}[htb] \centering - \includegraphics[width=13cm]{img/environ_var} + \includegraphics[width=14cm]{img/environ_var} \caption{Esempio di lista delle variabili di ambiente.} \label{fig:proc_envirno_list} \end{figure} @@ -1440,8 +1442,12 @@ necessit Gli standard POSIX e XPG3 definiscono alcune di queste variabili (le più comuni), come riportato in tab.~\ref{tab:proc_env_var}. GNU/Linux le supporta -tutte e ne definisce anche altre: per una lista più completa si può -controllare \cmd{man 5 environ}. +tutte e ne definisce anche altre, in particolare poi alcune funzioni di +libreria prevedono la presenza di specifiche variabili di ambiente che ne +modificano il comportamento, come quelle usate per indicare una localizzazione +e quelle per indicare un fuso orario; una lista più completa che comprende +queste ed ulteriori variabili si può ottenere con il comando \cmd{man 7 + environ}. \begin{table}[htb] \centering @@ -1685,7 +1691,7 @@ dette funzioni possono accedere ai loro argomenti. L'accesso viene pertanto realizzato a livello delle librerie standard del C che provvedono gli strumenti adeguati. L'uso di una \textit{variadic function} prevede quindi tre punti: -\begin{itemize} +\begin{itemize*} \item \textsl{Dichiarare} la funzione come \textit{variadic} usando un prototipo che contenga una \textit{ellipsis}. \item \textsl{Definire} la funzione come \textit{variadic} usando la stessa @@ -1693,7 +1699,7 @@ tre punti: gestione di un numero variabile di argomenti. \item \textsl{Invocare} la funzione specificando prima gli argomenti fissi, ed a seguire quelli addizionali. -\end{itemize} +\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 @@ -1723,7 +1729,7 @@ L'unica modalit sequenziale; essi verranno estratti dallo \itindex{stack} \textit{stack} secondo l'ordine in cui sono stati scritti. Per fare questo in \file{stdarg.h} sono definite delle apposite macro; la procedura da seguire è la seguente: -\begin{enumerate} +\begin{enumerate*} \item Inizializzare un puntatore alla lista degli argomenti di tipo \macro{va\_list} attraverso la macro \macro{va\_start}. \item Accedere ai vari argomenti opzionali con chiamate successive alla macro @@ -1731,7 +1737,7 @@ sono definite delle apposite macro; la procedura da seguire il secondo e così via. \item Dichiarare la conclusione dell'estrazione degli argomenti invocando la macro \macro{va\_end}. -\end{enumerate} +\end{enumerate*} In generale è perfettamente legittimo richiedere meno argomenti di quelli che potrebbero essere stati effettivamente forniti, e nella esecuzione delle \macro{va\_arg} ci si può fermare in qualunque momento ed i restanti argomenti @@ -1819,7 +1825,7 @@ Esistono varie modalit immediate è quella di specificare il numero degli argomenti opzionali come uno degli argomenti fissi. Una variazione di questo metodo è l'uso di un argomento per specificare anche il tipo degli argomenti (come fa la stringa di formato -per \func{printf}). +per \func{printf}). Una modalità diversa, che può essere applicata solo quando il tipo degli argomenti lo rende possibile, è quella che prevede di usare un valore speciale