From e2f92e43947fa40f05fd7d07b0a6a3a95c0a11b4 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Fri, 12 Aug 2011 12:21:56 +0000 Subject: [PATCH] Aggiunte cfmakeraw, cfsetspeed e rivisti alcuni titoli. --- ipc.tex | 8 ++++---- prochand.tex | 15 +++++++-------- session.tex | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/ipc.tex b/ipc.tex index bb9e0b0..bd6d126 100644 --- a/ipc.tex +++ b/ipc.tex @@ -9,7 +9,7 @@ %% License". %% -\chapter{La comunicazione fra processi} +\chapter{L'intercomunicazione fra processi} \label{cha:IPC} @@ -27,7 +27,7 @@ complessi ed evoluti come le RPC (\textit{Remote Procedure Calls}) e CORBA 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, @@ -779,7 +779,7 @@ all'interno di uno stesso processo, ma fra processi distinti (torneremo su 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 @@ -3249,7 +3249,7 @@ sez.~\ref{sec:ipc_sysv_shm} che possa restituisca i risultati via rete. % 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 diff --git a/prochand.tex b/prochand.tex index 76b68e2..8113d7f 100644 --- a/prochand.tex +++ b/prochand.tex @@ -3368,14 +3368,13 @@ cui si compiono le operazioni sulle risorse condivise (le cosiddette 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 diff --git a/session.tex b/session.tex index fdb7683..ba19e17 100644 --- a/session.tex +++ b/session.tex @@ -2083,6 +2083,22 @@ la connessione, qualora invece si utilizzi questo valore per la linea di input 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: @@ -2104,6 +2120,25 @@ linea da una struttura, il cui indirizzo è specificato dall'argomento \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.} -- 2.30.2