Scoperte le origini di una riga rimasta a mezzo, era un errore di taglia e
[gapil.git] / ipc.tex
diff --git a/ipc.tex b/ipc.tex
index 74b51365d4f7311193f2d8e734121abfe2fcd02f..654ec7d6083c0e0bd2467031a59d50275aa245a9 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -3322,7 +3322,7 @@ Le code di messaggi POSIX sono supportate da Linux a partire dalla versione
 generale, come le corrispettive del SysV IPC, le code di messaggi sono poco
 usate, dato che i socket, nei casi in cui sono sufficienti, sono più comodi, e
 che in casi più complessi la comunicazione può essere gestita direttamente con
-mutex e memoria condivisa con tutta la flessibilità che occorre.
+mutex (o semafori) e memoria condivisa con tutta la flessibilità che occorre.
 
 Per poter utilizzare le code di messaggi, oltre ad utilizzare un kernel
 superiore al 2.6.6 (o precedente, purché cui siano stati opportunamente
@@ -3585,11 +3585,16 @@ valore della priorit
 \const{MQ\_PRIO\_MAX}, che nel caso è pari a 32768.
 
 Qualora la coda sia piena, entrambe le funzioni si bloccano, a meno che non
-sia stata selezionata in fase di apertura la modalità non bloccante, nel qual
-caso entrambe ritornano \errcode{EAGAIN}. La sola differenza fra le due
-funzioni è che la seconda, passato il tempo massimo impostato con l'argomento
-\param{abs\_timeout}, ritorna comunque con un errore di \errcode{ETIMEDOUT}.
-
+sia stata selezionata in fase di apertura la modalità non
+bloccante,\footnote{o si sia impostato il flag \const{O\_NONBLOCK} sul fie
+  descriptor della coda.} nel qual caso entrambe ritornano \errcode{EAGAIN}.
+La sola differenza fra le due funzioni è che la seconda, passato il tempo
+massimo impostato con l'argomento \param{abs\_timeout},\footnote{deve essere
+  specificato un tempo assoluto tramite una struttura \struct{timespec} (vedi
+  fig.~\ref{fig:sys_timeval_struct}) indicato in numero di secondi e
+  nanosecondi a partire dal 1 gennaio 1970.} ritorna comunque con un errore di
+\errcode{ETIMEDOUT}, se invece il tempo è già scaduto al momento della
+chiamata e la coda è vuota la funzione ritorna immediatamente.
 
 Come per l'inserimento, anche per l'estrazione dei messaggi da una coda sono
 previste due funzioni, \funcd{mq\_receive} e \funcd{mq\_timedreceive}, i cui
@@ -3626,7 +3631,11 @@ prototipi sono:
 La funzione estrae dalla coda il messaggio a priorità più alta, o il più
 vecchio fra quelli della stessa priorità. Una volta ricevuto il messaggio
 viene tolto dalla coda e la sua dimensione viene restituita come valore di
-ritorno.
+ritorno.\footnote{si tenga presente che 0 è una dimensione valida la
+  condizione di errore è restituita dal valore -1; Stevens in \cite{UNP2} fa
+  notare che questo è uno dei casi in cui vale ciò che lo standard
+  \textsl{non} dice, una dimenzione nulla infatti, pur non essendo citata, non
+  viene proibita.}
 
 Se la dimensione specificata da \param{msg\_len} non è sufficiente a contenere
 il messaggio, entrambe le funzioni, al contrario di quanto avveniva nelle code
@@ -3645,10 +3654,8 @@ Qualora non interessi usare la priorit
 Si noti che con le code di messaggi POSIX non si ha la possibilità di
 selezionare quale messaggio estrarre con delle condizioni sulla priorità, a
 differenza di quanto avveniva con le code di messaggi di SysV che permettono
-invece la selezione in base al valore del campo \var{mtype}. Qualora non
-interessi usare la priorità dei messaggi si
+invece la selezione in base al valore del campo \var{mtype}. 
 
-% TODO vericare questa interruzione di paragrafo 
 % TODO inserire i dati di /proc/sys/fs/mqueue 
 
 Qualora la coda sia vuota entrambe le funzioni si bloccano, a meno che non si
@@ -3748,7 +3755,7 @@ all'userid effettivo, \var{si\_code} a \const{SI\_MESGQ}, e \var{si\_errno} a
 0. Questo ci dice che, se si effettua la ricezione dei messaggi usando
 esclusivamente il meccanismo di notifica, è possibile ottenere le informazioni
 sul processo che ha inserito un messaggio usando un gestore per il segnale in
-forma estesa\footnote{di nuovo si faccia riferimento a quanto detto al
+forma estesa.\footnote{di nuovo si faccia riferimento a quanto detto al
   proposito in sez.~\ref{sec:sig_sigaction} e sez.~\ref{sec:sig_real_time}.}