X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=ipc.tex;h=536d0960ce3a5c81630a339dc56c8f771f7ed484;hp=e0fef633d8d75c4f75cb8cb805f5aad3f10f3a41;hb=af52f000f3956b58885a317c51faaa57aa543472;hpb=52958c279452903b8c4edea25643096a32c67235 diff --git a/ipc.tex b/ipc.tex index e0fef63..536d096 100644 --- a/ipc.tex +++ b/ipc.tex @@ -184,7 +184,7 @@ nel file \file{BarCodePage.c} che si trova nella directory dei sorgenti. int main(int argc, char *argv[], char *envp[]) { ... - /* create two pipes to handle process communication */ + /* create two pipes, pipein and pipeout, to handle communication */ if ( (retval = pipe(pipein)) ) { WriteMess("input pipe creation error"); exit(0); @@ -204,14 +204,14 @@ int main(int argc, char *argv[], char *envp[]) dup2(pipein[0], STDIN_FILENO); /* remap stdin to pipe read end */ close(pipeout[0]); dup2(pipeout[1], STDOUT_FILENO); /* remap stdout in pipe output */ - execlp("barcode", "barcode", size, NULL); //"-o", "-", NULL); + execlp("barcode", "barcode", size, NULL); } close(pipein[0]); /* close input side of input pipe */ write(pipein[1], argv[1], strlen(argv[1])); /* write parameter to pipe */ close(pipein[1]); /* closing write end */ waitpid(pid, NULL, 0); /* wait child completion */ /* Second fork: use child to run ghostscript */ - if ( (pid = fork()) == -1) { /* on error exit */ + if ( (pid = fork()) == -1) { WriteMess("child creation error"); exit(0); } @@ -240,7 +240,7 @@ La prima operazione del programma (\texttt{\small 4--12}) le due pipe che serviranno per la comunicazione fra i due comandi utilizzati per produrre il codice a barre; si ha cura di controllare la riuscita della chiamata, inviando in caso di errore un messaggio invece dell'immagine -richiesta.\footnote{la funzione \func{WriteMess}, non è riportata in +richiesta.\footnote{la funzione \func{WriteMess} non è riportata in \secref{fig:ipc_barcodepage_code}; essa si incarica semplicemente di formattare l'uscita alla maniera dei CGI, aggiungendo l'opportuno \textit{mime type}, e formattando il messaggio in HTML, in modo che @@ -376,7 +376,7 @@ originarie del codice a barre e produce un JPEG delle dimensioni adeguate. Questo però ci porta a scontrarci con una caratteristica peculiare delle pipe, che a prima vista non è evidente. Per poter effettuare la conversione di un PDF infatti è necessario, per la struttura del formato, dover eseguire delle -\func{lseek} sul file da convertire; se si esegue \cmd{gs} su un file normale +\func{lseek} sul file da convertire; se si esegue \cmd{gs} su un file regolare non ci sono problemi, ma una pipe però è rigidamente sequenziale, ed il tentativo di eseguire detta operazione su una pipe comporta l'immediato fallimento con un errore di \macro{ESPIPE}. Questo ci dice che in generale la @@ -614,12 +614,13 @@ oggetto. Per far questo a ciascuno di essi viene anche associata una stessa chiave due processi diversi potranno ricavare l'identificatore associato ad un oggetto e accedervi entrambi. - Questa caratteristica mostra il primo dei problemi associati al sistema di IPC di System V. Un secondo problema riguarda le modalità per l'accesso a questi oggetti. + + \subsection{Code di messaggi} \label{sec:ipc_messque}