X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=601d3c3f513a6b601ec9e7fb1e3555b820c2b3d6;hp=98c9b8d2ad520db0f036f902f46d2495901d4bf9;hb=6271cd1b0cc4d403753d1f48d3d562b16db7e613;hpb=1037968a929116a54d1b42828545bd3a4d228efb diff --git a/process.tex b/process.tex index 98c9b8d..601d3c3 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}} @@ -1123,8 +1124,7 @@ funzioni precedenti, ma a differenza di \func{memalign} restituisce un codice di errore \errcode{EINVAL} anche se \param{alignment} non è un multiplo della la dimensione di \code{sizeof(void *)}. Come per le precedenti la memoria allocata con \func{posix\_memalign} può essere disallocata con -\func{free}.\footnote{che in caso questo caso è quanto richiesto dallo - standard.} +\func{free}.\footnote{che in questo caso è quanto richiesto dallo standard.} Un secondo caso in cui risulta estremamente utile poter avere un maggior controllo delle modalità di allocazione della memoria è quello in cui cercano @@ -1176,48 +1176,67 @@ argomento, che verr di \func{malloc}, venissero trovate delle inconsistenze, come delle operazioni di scrittura oltre i limiti dei buffer allocati. Per questo motivo la funzione deve essere chiamata prima di qualunque allocazione di memoria, altrimenti -fallirà con un valore di ritorni di $-1$. - -Se come argomento si passa \var{NULL} verrà utilizzata una funzione -predefinita che stampa un messaggio di errore ed invoca la funzione -\func{abort} (vedi sez.~\ref{sec:sig_alarm_abort}), altrimenti si dovrà -utilizzare una funzione ad hoc che riceverà come argomento un codice di tipo -\type{mcheck\_status}, un tipo enumerato che può assumere soltanto i valori di -tab. - +fallirà con un valore di ritorno pari a $-1$. +Se come argomento di \func{mcheck} si passa \var{NULL} verrà utilizzata una +funzione predefinita che stampa un messaggio di errore ed invoca la funzione +\func{abort} (vedi sez.~\ref{sec:sig_alarm_abort}), altrimenti si dovrà create +una funzione personalizzata che verrà eseguita ricevendo un unico argomento di +tipo \type{mcheck\_status},\footnote{trattasi in sostanza di un codice di + errore che la funzione di emergenza potrà utilizzare per prendere le + opportune azioni.} un tipo enumerato che può assumere soltanto i valori di +tab.~\ref{tab:mcheck_status_value}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|c|c|c|p{7cm}|} + \begin{tabular}[c]{|l|p{7cm}|} \hline \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ - \macro{}& \\ + \macro{MCHECK\_OK} & riportato (a \func{mprobe}) se nessuna + inconsistenza è presente.\\ + \macro{MCHECK\_DISABLED}& riportato (a \func{mprobe}) se si è chiamata + \func{mcheck} dopo aver già usato + \func{malloc}.\\ + \macro{MCHECK\_HEAD} & i dati immediatamente precedenti il buffer sono + stati modificati, avviene in genere quando si + decrementa eccessivamente il valore di un + puntatore scrivendo poi prima dell'inizio del + buffer.\\ + \macro{MCHECK\_TAIL} & i dati immediatamente seguenti il buffer sono + stati modificati, succede quando si va scrivere + oltre la dimensione correttta del buffer.\\ + \macro{MCHECK\_FREE} & il buffer è già stato disallocato.\\ \hline \end{tabular} - \caption{Valori dello stato.} + \caption{Valori dello stato dell'allocazione di memoria ottenibili dalla + funzione di teminazione installata con \func{mcheck}.} \label{tab:mcheck_status_value} \end{table} +Una volta che si sia chiamata \func{mcheck} con successo si può anche +controllare esplicitamente lo stato delle allocazioni (senza aspettare un +errore nelle relative funzioni) utilizzando la funzione \funcd{mprobe}, il cui +prototipo è: +\begin{prototype}{mcheck.h}{enum mcheck\_status mprobe(ptr)} + Esegue un controllo di consistenza delle allocazioni. + + \bodydesc{La funzione restituisce un codice fra quelli riportati in + tab.\ref{tab:mcheck_status_value}.} +\end{prototype} + +La funzione richiede che si passi come argomento un puntatore ad un blocco di +memoria precedentemente allocato con \func{malloc} o \func{realloc}, e +restituisce lo stesso codice di errore che si avrebbe per la funzione di +emergenza ad una successiva chiamata di una funzione di allocazione, e poi i +primi due codici che indicano rispettivamente quando tutto è a posto o il +controllo non è possibile per non aver chiamato \func{mcheck} in tempo. + % TODO: trattare le altre funzionalità avanzate di \func{malloc}, mallopt, -% mtrace, muntrace, mcheck, mallinfo e gli hook -% con le glibc 2.10 c'è pure malloc_info a sostituire mallinfo, vedi -% http://udrepper.livejournal.com/20948.html +% mtrace, muntrace, mallinfo e gli hook con le glibc 2.10 c'è pure malloc_info +% a sostituire mallinfo, vedi http://udrepper.livejournal.com/20948.html \section{Argomenti, opzioni ed ambiente di un processo} \label{sec:proc_options}