Sistemata bibliografia, aggiunte ad ioctl e qualcosa in piu` sulle pipe
[gapil.git] / ipc.tex
diff --git a/ipc.tex b/ipc.tex
index b8c703a773d7bb2524c5862c48daa1280215ef6d..352a7197b9435ea9ff4217540c72efb3ef18dc47 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -31,14 +31,15 @@ evoluto.
 \subsection{Le \textit{pipe} standard}
 \label{sec:ipc_pipes}
 
-Le \textit{pipe} nascono sostanzialmente con Unix, e sono il primo, ed uno dei
-più usati, meccanismi di comunicazione fra processi. Si tratta in sostanza uno
-speciale tipo di file\footnote{più precisamente un file descriptor; le pipe
-  sono create dal kernel e non risiedono su disco.} in cui un processo scrive
-ed un altro legge. Si viene così a costituire un canale di comunicazione fra i
-due processi, nella forma di un \textsl{tubo} (da cui il nome) in cui uno dei
-processi immette dati che poi arriveranno all'altro.
-
+Le \textit{pipe} nascono sostanzialmente con Unix, e sono il primo, e tuttora
+uno dei più usati, meccanismi di comunicazione fra processi. Si tratta in
+sostanza di uno speciale tipo di file descriptor, più precisamente una coppia
+di file descriptor,\footnote{si tenga presente che le pipe sono oggetti creati
+  dal kernel e non risiedono su disco.}  su cui da una parte si scrive e da
+un'altra si legge. Si viene così a costituire un canale di comunicazione
+tramite i due file descriptor, nella forma di un \textsl{tubo} (da cui il
+nome) in cui in genere un processo immette dati che poi arriveranno ad un
+altro.
 
 La funzione che permette di creare una pipe è appunto \func{pipe}; il suo
 prototipo è:
@@ -94,16 +95,42 @@ Tutto ci
 comunicazione fra processi attraverso una pipe, utilizzando le ordinarie
 proprietà dei file, ma ci mostra anche qual'è il principale\footnote{Stevens
   riporta in APUE come limite anche il fatto che la comunicazione è
-  unidirezionale, in realtà questo è un limite facilemente risolvibile usando
+  unidirezionale, in realtà questo è un limite facilmente risolvibile usando
   una coppia di pipe.} limite nell'uso delle pipe. È necessario infatti che i
 processi possano condividere i file descriptor della pipe, e per questo essi
 devono comunque derivare da uno stesso processo padre che ha aperto la pipe,
 o, più comunemente, essere nella relazione padre/figlio.
 
+
+
+\subsection{Un esempio dell'uso delle pipe}
+\label{sec:ipc_pipe_use}
+
 Per capire meglio il funzionamento di una pipe faremo un esempio di quello che
 è il loro uso più comune, analogo a quello effettuato della shell, e che
-consiste nell'inviare l'output di un processo (usando lo standard output)
-sull'input di un'altro.
+consiste nell'inviare l'output di un processo (lo standard output) sull'input
+di un'altro. Realizzaremo il programma nella forma di un
+\textit{cgi-bin}\footnote{breve descrizione, da fare, di cosa è un cgi-bin.}
+per apache, che genera una immagine JPEG di un codice a barre, specificato
+come parametro di input.
+
+Per fare questo useremo i programmi \cmd{barcode} e \cmd{gs}, il primo infatti
+è in grado di generare immagini postscript di codici a barre corrispondenti ad
+una qualunque stringa, data come parametro, mentre il secondo è in grado di
+convertire un file postscript in una immagine JPEG. Usando l'ouptut del primo
+come input del secondo attraverso una pipe potremo generare immagini JPEG del
+codice a barre di una stringa qualunque. 
+
+Si potrebbe obiettare che sarebbe molto più semplice ottenere lo stesso
+risultato salvando il tutto in un file temporaneo, ma si dovrebbe comunque
+risolvere il problema di come comunicare il nome di questo file da un processo
+all'altro, dato che utilizzare lo stesso file porterebbe ad inevitabili
+sovrascritture nell'accavallarsi di diversi processi. L'uso di una pipe
+permette di risolvere il problema in maniera semplice ed elegante.
+
+Il programma ci servirà anche come esempio dell'uso di alcune delle funzioni
+di manipolazione dei file descriptor, come \func{dup} e \func{dup2}, viste in 
+\secref{sec:file_dup}