Altre funzioni di attesa, un po' meglio del while(1) ...
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 7 Mar 2002 22:21:55 +0000 (22:21 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 7 Mar 2002 22:21:55 +0000 (22:21 +0000)
signal.tex

index bfacf64b642354ca7d488b2dda271551c3683cc1..c2345f01e1c49dc0ba19659c9775ca2a2d6d81f6 100644 (file)
@@ -1275,12 +1275,36 @@ vedremo fra poco). In tal caso mescolare chiamata di \func{alarm} e
 indefiniti. Nel caso delle \acr{glibc} è stata usata una implementazione
 completamente indipendente e questi problemi non ci sono.
 
-La granularità di \func{sleep} è 
+La granularità di \func{sleep} permette di specificare attese in secondi, per
+questo sia sotto BSD4.3 che in SUSv2 è stata definita la funzione
+\func{usleep} (dove la \texttt{u} è intesa come sostituzione di $\mu$); i due
+standard hanno delle definizioni diverse, ma le \acr{glibc}
+seguono\footnote{secondo la man page almeno dalla versione 2.2.2.} seguono
+quella di SUSv2 che prevede il seguente prototipo: 
+\begin{prototype}{unistd.h}{int usleep(unsigned long usec)}
+  
+  Pone il processo in stato di sleep per \param{usec} microsecondi.
+  
+  \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in
+    caso di errore, nel qual caso \var{errno} è settata a \macro{EINTR}.}
+
+\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 è:
+\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}.
+  
+  \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}.}
+\end{prototype}
 
 
 
-Come accennato è possibile implementare \func{sleep} a partire da dall'uso di
-\func{pause} e \func{alarm}; 
 
 
 \subsection{La gestione di \macro{SIGCHLD}}
@@ -1292,7 +1316,7 @@ segnale 
 conclusione di un processo è quella di inviare questo segnale al
 padre;\footnote{in realtà in SRV4 eredita la semantica di System V, in cui il
   segnale si chiama \macro{SIGCLD} e viene trattato in maniera speciale; se si
-  setta esplicitamente l'azione a \macro{SIG_IGN} il segnale non viene
+  setta esplicitamente l'azione a \macro{SIG\_IGN} il segnale non viene
   generato ed il sistema non genera zombie (lo stato di terminazione viene
   scartato senza dover chiamare una wait), l'azione di default è sempre quella
   di ignorare il segnale, ma non attiva questo comportamento. Linux, come BSD
@@ -1307,6 +1331,12 @@ gestire questo segnale.
 \label{sec:sig_control}
 
 
+\subsection{Un esempio di problema}
+\label{sec:sig_example}
+
+Come accennato è possibile implementare \func{sleep} a partire da dall'uso di
+\func{pause} e \func{alarm};
+
 
 
 \subsection{Le funzioni \func{sigprocmask} e \func{sigpending}}