X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=ipc.tex;h=44b1ca2da855f829f417b91882b1cf5fb49cd4d5;hb=5d2f43482c192e29b4e0039adf1de81d5f3e54b9;hp=6d0cb5db711bc11a64bc331ffb429fb4dfed5bba;hpb=5ac64ab2753cbd2198e9b5b17119134b5ef63bc6;p=gapil.git diff --git a/ipc.tex b/ipc.tex index 6d0cb5d..44b1ca2 100644 --- a/ipc.tex +++ b/ipc.tex @@ -431,9 +431,10 @@ quello illustrato per le pipe in sez.~\ref{sec:ipc_pipes}. Abbiamo già visto in sez.~\ref{sec:file_mknod} le funzioni \func{mknod} e \func{mkfifo} che permettono di creare una fifo; per utilizzarne una un -processo non avrà che da aprire il relativo file speciale o in lettura o -scrittura; nel primo caso sarà collegato al capo di uscita della fifo, e dovrà -leggere, nel secondo al capo di ingresso, e dovrà scrivere. +processo non avrà che da aprire il relativo \index{file!speciali} file +speciale o in lettura o scrittura; nel primo caso sarà collegato al capo di +uscita della fifo, e dovrà leggere, nel secondo al capo di ingresso, e dovrà +scrivere. Il kernel crea una singola pipe per ciascuna fifo che sia stata aperta, che può essere acceduta contemporaneamente da più processi, sia in lettura che in @@ -727,20 +728,20 @@ dei socket in cap.~\ref{cha:socket_intro},\footnote{si tratta comunque di oggetti di comunicazione che, come le pipe, sono utilizzati attraverso dei file descriptor.} nell'ambito dell'interfaccia generale che essi forniscono per la programmazione di rete; e vedremo anche -(in~sez.~\ref{sec:sock_sa_local}) come si possono definire dei file speciali -(di tipo socket, analoghi a quello associati alle fifo) cui si accede però -attraverso quella medesima interfaccia; vale però la pena esaminare qui una -modalità di uso dei socket locali\footnote{la funzione \func{socketpair} è - stata introdotta in BSD4.4, ma è supportata in genere da qualunque sistema - che fornisca l'interfaccia dei socket.} che li rende sostanzialmente -identici ad una pipe bidirezionale. +(in~sez.~\ref{sec:sock_sa_local}) come si possono definire dei +\index{file!speciali} file speciali (di tipo socket, analoghi a quello +associati alle fifo) cui si accede però attraverso quella medesima +interfaccia; vale però la pena esaminare qui una modalità di uso dei socket +locali\footnote{la funzione \func{socketpair} è stata introdotta in BSD4.4, ma + è supportata in genere da qualunque sistema che fornisca l'interfaccia dei + socket.} che li rende sostanzialmente identici ad una pipe bidirezionale. La funzione \funcd{socketpair} infatti consente di creare una coppia di file descriptor connessi fra di loro (tramite un socket, appunto), senza dover -ricorrere ad un 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 è: +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 è: \begin{functions} \headdecl{sys/types.h} \headdecl{sys/socket.h} @@ -3254,7 +3255,12 @@ più avanti, quando realizzeremo una nuova versione del monitor visto in sez.~\ref{sec:ipc_sysv_shm} che possa restituisca i risultati via rete. \itindend{memory~mapping} -% TODO fare esempio di mmap anonima +% TODO: fare esempio di mmap anonima + +% TODO: con il kernel 3.2 è stata introdotta un nuovo meccanismo di +% intercomunicazione veloce chiamato Cross Memory Attach, da capire se e come +% trattarlo qui, vedi http://lwn.net/Articles/405346/ +% https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=fcf634098c00dd9cd247447368495f0b79be12d1 \section{L'intercomunicazione fra processi di POSIX} \label{sec:ipc_posix}