X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=eb939d9e8578d8c1f60a6086f91bdf35f9c32f24;hp=c2345f01e1c49dc0ba19659c9775ca2a2d6d81f6;hb=0df8310fbad12660d8de351c7550010943a3a167;hpb=0c63d62732e14ab73d5f1f0a0e5d70f3873bc334 diff --git a/signal.tex b/signal.tex index c2345f0..eb939d9 100644 --- a/signal.tex +++ b/signal.tex @@ -1290,20 +1290,50 @@ quella di SUSv2 che prevede il seguente prototipo: \end{prototype} -Anche questa funzione può presentare problemi nell'interazione con -\func{alarm} e \macro{SIGALRM}, ed è pertanto deprecata in favore di -\func{nanosleep}, definita dallo standard POSIX1.b, il cui prototipo è: +Anche questa funzione a seconda delle implementazioni può presentare problemi +nell'interazione con \func{alarm} e \macro{SIGALRM}, ed è pertanto deprecata +in favore di \func{nanosleep}, definita dallo standard POSIX1.b, il cui +prototipo è: \begin{prototype}{unistd.h}{int nanosleep(const struct timespec *req, struct timespec *rem)} Pone il processo in stato di sleep per il tempo specificato da \param{req}. + In caso di interruzione restituisce il tempo restante in \param{rem}. \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in - caso di errore, nel qual caso \var{errno} è settata a \macro{EINVAL} o - \macro{EINTR}.} + caso di errore, nel qual caso \var{errno} è settata a + \begin{errlist} + \item[\macro{EINVAL}] si è specificato un numero di secondi negativo o un + numero di nanosecondi maggiore di 999.999.999. + \item[\macro{EINTR}] la funzione è stata interrotta da un segnale. + \end{errlist}} \end{prototype} +Lo standard richiede che la funzione sia implementata in maniera del tutto +indipendente da \func{alarm}\footnote{nel caso di Linux questo è fatto + utilizzando direttamente il timer del kernel.} e sia utilizzabile senza +interferenze con l'uso di \macro{SIGALRM}. La funzione prende come parametri +delle strutture di tipo \var{timespec}, la cui definizione è riportata in +\figref{fig:sig_timespec_def}, che permettono di specificare un tempo con una +precisione (teorica) fino al nanosecondo. + +\begin{figure}[!htb] + \footnotesize \centering + \begin{minipage}[c]{15cm} + \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} +struct timespec +{ + time_t tv_sec; /* seconds */ + long tv_nsec; /* nanoseconds */ +}; + \end{lstlisting} + \end{minipage} + \normalsize + \caption{La struttura \var{timespec} di \func{nanosleep}.} + \label{fig:sig_timespec_def} +\end{figure} +La