X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=f6ca908c2d04f21ced56256fe02305144271a9c4;hp=982fc68cfd3a2acb1f135d120e9555a5552f0969;hb=beece18eba2dcc2a9b915dab61277df8685a3da6;hpb=14dab17d3c3d2e11e554197ea2045dbc7a485de9 diff --git a/signal.tex b/signal.tex index 982fc68..f6ca908 100644 --- a/signal.tex +++ b/signal.tex @@ -1,6 +1,6 @@ %% signal.tex %% -%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2014 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -1781,13 +1781,13 @@ fig.~\ref{fig:sig_sleep_wrong}. Dato che è nostra intenzione utilizzare \signal{SIGALRM} il primo passo della nostra implementazione sarà quello di installare il relativo gestore salvando -il precedente (\texttt{\small 14-17}). Si effettuerà poi una chiamata ad +il precedente (\texttt{\small 14--17}). Si effettuerà poi una chiamata ad \func{alarm} per specificare il tempo d'attesa per l'invio del segnale a cui segue la chiamata a \func{pause} per fermare il programma (\texttt{\small - 18-20}) fino alla sua ricezione. Al ritorno di \func{pause}, causato dal -ritorno del gestore (\texttt{\small 1-9}), si ripristina il gestore originario -(\texttt{\small 21-22}) restituendo l'eventuale tempo rimanente -(\texttt{\small 23-24}) che potrà essere diverso da zero qualora + 18--20}) fino alla sua ricezione. Al ritorno di \func{pause}, causato dal +ritorno del gestore (\texttt{\small 1--9}), si ripristina il gestore originario +(\texttt{\small 21--22}) restituendo l'eventuale tempo rimanente +(\texttt{\small 23--24}) che potrà essere diverso da zero qualora l'interruzione di \func{pause} venisse causata da un altro segnale. Questo codice però, a parte il non gestire il caso in cui si è avuta una @@ -1816,11 +1816,11 @@ codice del tipo di quello riportato in fig.~\ref{fig:sig_sleep_incomplete}. \label{fig:sig_sleep_incomplete} \end{figure} -In questo caso il gestore (\texttt{\small 18-27}) non ritorna come in +In questo caso il gestore (\texttt{\small 18--27}) non ritorna come in fig.~\ref{fig:sig_sleep_wrong}, ma usa la funzione \func{longjmp} (\texttt{\small 25}) per rientrare direttamente nel corpo principale del programma. Dato che in questo caso il valore di uscita che verrà restituito da -\func{setjmp} è 1, grazie alla condizione impostata in (\texttt{\small 9-12}) +\func{setjmp} è 1, grazie alla condizione impostata in (\texttt{\small 9--12}) si potrà evitare comunque che \func{pause} sia chiamata a vuoto. Ma anche questa implementazione comporta dei problemi, in questo caso infatti @@ -1838,11 +1838,11 @@ da controllare nel corpo principale del programma, con un codice del tipo di quello riportato in fig.~\ref{fig:sig_event_wrong}. La logica del programma è quella di far impostare al gestore (\texttt{\small - 14-19}) una \index{variabili!globali} variabile globale, preventivamente + 14--19}) una \index{variabili!globali} variabile globale, preventivamente inizializzata nel programma principale, ad un diverso valore. In questo modo dal corpo principale del programma si potrà determinare, osservandone il contenuto di detta variabile, l'occorrenza o meno del segnale, ed eseguire le -azioni conseguenti (\texttt{\small 6-11}) relative. +azioni conseguenti (\texttt{\small 6--11}) relative. \begin{figure}[!htbp] \footnotesize\centering @@ -2508,14 +2508,14 @@ presenta neanche questa necessità. Per evitare i problemi di interferenza con gli altri segnali in questo caso non si è usato l'approccio di fig.~\ref{fig:sig_sleep_incomplete} evitando -l'uso di \func{longjmp}. Come in precedenza il gestore (\texttt{\small 27-30}) -non esegue nessuna operazione, limitandosi a ritornare per interrompere il -programma messo in attesa. +l'uso di \func{longjmp}. Come in precedenza il gestore (\texttt{\small + 27--30}) non esegue nessuna operazione, limitandosi a ritornare per +interrompere il programma messo in attesa. -La prima parte della funzione (\texttt{\small 6-10}) provvede ad installare +La prima parte della funzione (\texttt{\small 6--10}) provvede ad installare l'opportuno gestore per \signal{SIGALRM}, salvando quello originario, che sarà ripristinato alla conclusione della stessa (\texttt{\small 23}); il passo -successivo è quello di bloccare \signal{SIGALRM} (\texttt{\small 11-14}) per +successivo è quello di bloccare \signal{SIGALRM} (\texttt{\small 11--14}) per evitare che esso possa essere ricevuto dal processo fra l'esecuzione di \func{alarm} (\texttt{\small 16}) e la sospensione dello stesso. Nel fare questo si salva la maschera corrente dei segnali, che sarà ripristinata alla @@ -3056,9 +3056,9 @@ tab.~\ref{tab:sig_timer_clockid_types}. \end{table} -% NOTE: dal 2.6.39 anche CLOCK_BOOTTIME_ALARM e CLOCK_BOOTTIME % NOTE: dal 3.0 anche i cosiddetti Posix Alarm Timers, con % CLOCK_REALTIME_ALARM vedi http://lwn.net/Articles/429925/ +% TODO: dal 3.10 anche CLOCK_TAI Per poter utilizzare queste funzionalità le \acr{glibc} richiedono che la macro \macro{\_POSIX\_C\_SOURCE} sia definita ad un valore maggiore o uguale @@ -3274,7 +3274,7 @@ prototipo è: \fhead{time.h} \fdecl{int timer\_create(clockid\_t clockid, struct sigevent *evp, timer\_t *timerid)} -\fdesc{Crea un nuovo timer Posix.} +\fdesc{Crea un nuovo timer POSIX.} } {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual @@ -3415,7 +3415,7 @@ identificatore, si può attivare o disattivare un allarme (in gergo \fhead{time.h} \fdecl{int timer\_settime(timer\_t timerid, int flags, const struct itimerspec *new\_value, struct itimerspec *old\_value)} -\fdesc{Arma o disarma un timer POSIX..} +\fdesc{Arma o disarma un timer POSIX.} } {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual @@ -3592,7 +3592,7 @@ un timer venga cancellato prima della ricezione del segnale pendente per la notifica di una scadenza, il comportamento del sistema è indefinito. Infine a partire dal kernel 2.6 e per le versioni della \acr{libc} superiori -alla 2.1, si può utilizzare la nuova interfaccia dei timer Posix anche per le +alla 2.1, si può utilizzare la nuova interfaccia dei timer POSIX anche per le funzioni di attesa, per questo è disponibile la funzione di sistema \funcd{clock\_nanosleep}, il cui prototipo è: