X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=ipc.tex;h=35095a445dd71e487e2f049d3fa23b9fa40f9f0c;hp=abe229a50538d4ffb8bd31449eba60c6f15f43a2;hb=88d22f4971adcbdb816c405a1375ae0a8d57bdde;hpb=59dd0e503abc074d287d42b64b62f8199912b91b diff --git a/ipc.tex b/ipc.tex index abe229a..35095a4 100644 --- a/ipc.tex +++ b/ipc.tex @@ -514,10 +514,10 @@ a quello illustrato per le \textit{pipe} in sez.~\ref{sec:ipc_pipes}. Abbiamo già trattato in sez.~\ref{sec:file_mknod} le funzioni \func{mknod} e \func{mkfifo} che permettono di creare una \textit{fifo}. Per utilizzarne una -un processo non avrà che da aprire il relativo \index{file!speciali} file -speciale o in lettura o scrittura; nel primo caso il processo sarà collegato -al capo di uscita della \textit{fifo}, e dovrà leggere, nel secondo al capo di -ingresso, e dovrà scrivere. +un processo non avrà che da aprire il relativo file speciale o in lettura o +scrittura; nel primo caso il processo sarà collegato al capo di uscita della +\textit{fifo}, e dovrà leggere, nel secondo al capo di ingresso, e dovrà +scrivere. Il kernel alloca un singolo buffer per ciascuna \textit{fifo} che sia stata aperta, e questa potrà essere acceduta contemporaneamente da più processi, sia @@ -821,21 +821,21 @@ presenta il problema della unidirezionalità del flusso dei dati, è quello dei cosiddetti \textsl{socket locali} (o \textit{Unix domain socket}). Tratteremo in generale i socket in cap.~\ref{cha:socket_intro}, nell'ambito dell'interfaccia che essi forniscono per la programmazione di rete, e vedremo -anche (in~sez.~\ref{sec:sock_sa_local}) come si possono utilizzare i -\index{file!speciali} file speciali di tipo socket, analoghi a quelli -associati alle \textit{fifo} (si rammenti sez.~\ref{sec:file_file_types}) cui -si accede però attraverso quella medesima interfaccia; vale però la pena -esaminare qui una modalità di uso dei socket locali che li rende -sostanzialmente identici ad una \textit{pipe} bidirezionale. +anche (in~sez.~\ref{sec:sock_sa_local}) come si possono utilizzare i file +speciali di tipo socket, analoghi a quelli associati alle \textit{fifo} (si +rammenti sez.~\ref{sec:file_file_types}) cui si accede però attraverso quella +medesima interfaccia; vale però la pena esaminare qui una modalità di uso dei +socket locali che li rende sostanzialmente identici ad una \textit{pipe} +bidirezionale. La funzione di sistema \funcd{socketpair}, introdotta da BSD ma supportata in genere da qualunque sistema che fornisca l'interfaccia dei socket ed inclusa in POSIX.1-2001, consente infatti di creare una coppia di file descriptor connessi fra loro (tramite un socket, appunto) senza dover ricorrere ad un -\index{file!speciali} file speciale sul filesystem. I descrittori sono del -tutto analoghi a quelli che si avrebbero con una chiamata a \func{pipe}, con -la sola differenza è che in questo caso il flusso dei dati può essere -effettuato in entrambe le direzioni. Il prototipo della funzione è: +file speciale sul filesystem. I descrittori sono del tutto analoghi a quelli +che si avrebbero con una chiamata a \func{pipe}, con la sola differenza è che +in questo caso il flusso dei dati può essere effettuato in entrambe le +direzioni. Il prototipo della funzione è: \begin{funcproto}{ \fhead{sys/types.h} @@ -3066,12 +3066,11 @@ con un messaggio di errore. Poi, per verificare che l'argomento specifichi effettivamente una directory, si esegue (\texttt{\small 24-26}) su di esso una \func{chdir}, uscendo immediatamente in caso di errore. Questa funzione serve anche per impostare -la \index{directory~di~lavoro} directory di lavoro del programma nella -directory da tenere sotto controllo, in vista del successivo uso della -funzione \func{daemon}. Si noti come si è potuta fare questa scelta, -nonostante le indicazioni illustrate in sez.~\ref{sec:sess_daemon}, per il -particolare scopo del programma, che necessita comunque di restare all'interno -di una directory. +la directory di lavoro del programma nella directory da tenere sotto +controllo, in vista del successivo uso della funzione \func{daemon}. Si noti +come si è potuta fare questa scelta, nonostante le indicazioni illustrate in +sez.~\ref{sec:sess_daemon}, per il particolare scopo del programma, che +necessita comunque di restare all'interno di una directory. Infine (\texttt{\small 27-29}) si installano i gestori per i vari segnali di terminazione che, avendo a che fare con un programma che deve essere eseguito @@ -3100,9 +3099,9 @@ intercomunicazione il programma entra nel ciclo principale (\texttt{\small Il primo passo (\texttt{\small 41}) è eseguire \func{daemon} per proseguire con l'esecuzione in background come si conviene ad un programma demone; si noti che si è mantenuta, usando un valore non nullo del primo argomento, la -\index{directory~di~lavoro} directory di lavoro corrente. Una volta che il -programma è andato in background l'esecuzione prosegue all'interno di un ciclo -infinito (\texttt{\small 42-48}). +directory di lavoro corrente. Una volta che il programma è andato in +background l'esecuzione prosegue all'interno di un ciclo infinito +(\texttt{\small 42-48}). Si inizia (\texttt{\small 43}) bloccando il mutex con \func{MutexLock} per poter accedere alla memoria condivisa (la funzione si bloccherÃ