From a609782c8411e35c6d0a41f6b036674ab3034612 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sat, 6 Jan 2007 20:47:09 +0000 Subject: [PATCH] Scoperte le origini di una riga rimasta a mezzo, era un errore di taglia e incolla risalente alla prima stesura; inserite alcune note per {{{mq_receive}}} e {{{mq_timedreceive}}}. --- ipc.tex | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/ipc.tex b/ipc.tex index 74b5136..654ec7d 100644 --- 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}.} -- 2.30.2