%% License".
%%
-\chapter{La comunicazione fra processi}
+\chapter{L'intercomunicazione fra processi}
\label{cha:IPC}
implementati con un ulteriore livello sopra i meccanismi elementari.
-\section{La comunicazione fra processi tradizionale}
+\section{L'intercomunicazione fra processi tradizionale}
\label{sec:ipc_unix}
Il primo meccanismo di comunicazione fra processi introdotto nei sistemi Unix,
questa funzionalità in sez.~\ref{sec:sock_fd_passing}).
-\section{Il sistema di comunicazione fra processi di System V}
+\section{L'intercomunicazione fra processi di System V}
\label{sec:ipc_sysv}
Benché le pipe e le fifo siano ancora ampiamente usate, esse scontano il
% TODO fare esempio di mmap anonima
-\section{Il sistema di comunicazione fra processi di POSIX}
+\section{L'intercomunicazione fra processi di POSIX}
\label{sec:ipc_posix}
Per superare i numerosi problemi del \textit{SysV IPC}, evidenziati per i suoi
opportunamente protette da meccanismi di sincronizzazione (torneremo su queste
problematiche di questo tipo in cap.~\ref{cha:IPC}).
-\itindbeg{deadlock}
-Un caso particolare di \textit{race condition} sono poi i cosiddetti
-\textit{deadlock}, particolarmente gravi in quanto comportano spesso il blocco
-completo di un servizio, e non il fallimento di una singola operazione. Per
-definizione un \textit{deadlock} è una situazione in cui due o più processi
-non sono più in grado di proseguire perché ciascuno aspetta il risultato di
-una operazione che dovrebbe essere eseguita dall'altro.
-
+\itindbeg{deadlock} Un caso particolare di \textit{race condition} sono poi i
+cosiddetti \textit{deadlock} (traducibile in \textsl{condizioni di stallo}),
+particolarmente gravi in quanto comportano spesso il blocco completo di un
+servizio, e non il fallimento di una singola operazione. Per definizione un
+\textit{deadlock} è una situazione in cui due o più processi non sono più in
+grado di proseguire perché ciascuno aspetta il risultato di una operazione che
+dovrebbe essere eseguita dall'altro.
L'esempio tipico di una situazione che può condurre ad un
\textit{deadlock} è quello in cui un flag di
l'effetto sarà quello di rendere la sua velocità identica a quella della linea
di output.
+Dato che in genere si imposta sempre la stessa velocità sulle linee di uscita
+e di ingresso è supportata anche la funzione \funcd{cfsetspeed}, una
+estensione di BSD,\footnote{la funzione origina da 4.4BSD e richiede sua
+ definita la macro \macro{\_BSD\_SOURCE}.} il cui prototipo è:
+\begin{functions}
+ \headdecl{unistd.h}
+ \headdecl{termios.h}
+ \funcdecl{int cfsetspeed(struct termios *termios\_p, speed\_t speed)}
+ Imposta la velocità delle linee seriali.
+
+ \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+ errore, che avviene solo quando il valore specificato non è valido.}
+\end{functions}
+\noindent la funzione è identica alle due precedenti ma imposta la stessa
+velocità sia per la linea di ingresso che per quella di uscita.
+
Analogamente a quanto avviene per l'impostazione, le velocità possono essere
lette da una struttura \struct{termios} utilizzando altre due funzioni,
\funcd{cfgetispeed} e \funcd{cfgetospeed}, i cui prototipi sono:
\param{termios\_p} che deve essere stata letta in precedenza con
\func{tcgetattr}.
+Infine sempre da BSD è stata ripresa una funzione che consente di impostare il
+teminale in una modalità analoga all cosiddetta modalità ``\textit{raw}'' di
+System V, in cui i dati in input vengono resi disponibili un carattere alla
+volta, e l'echo e tutte le interpretazioni dei caratteri in entrata e uscita
+sono disabilitate. La funzione è \funcd{cfmakeraw} ed il suo prototipo è:
+\begin{functions}
+ \headdecl{unistd.h}
+ \headdecl{termios.h}
+ \funcdecl{void cfmakeraw(struct termios *termios\_p)}
+ Importa il terminale in modalità ``\textit{raw}'' alla System V.
+
+ \bodydesc{La funzione imposta solo i valori in \param{termios\_p}, e non
+ sono previste condizioni di errore.}
+\end{functions}
+
+Anche in questo caso la funzione si limita a preparare i valori che poi
+saranno impostato con una successiva chiamata a \func{tcsetattr}, in sostanza
+la funzione è equivalente a:
+\includecodesnip{listati/cfmakeraw.c}
\subsection{La gestione della disciplina di linea.}