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);
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);
}
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
-/* BarCodeOld.c
+/* BarCodePage.c
*
* Copyright (C) 2002 Simone Piccardi
*
* http://localhost/cgi-bin/barcode?string
* where string is the code to be converted
*
- * $Id: BarCodePage.c,v 1.1 2002/06/30 13:26:17 piccardi Exp $
+ * $Id: BarCodePage.c,v 1.2 2002/08/10 14:22:53 piccardi Exp $
*
****************************************************************/
/*
#include <sys/types.h> /* predefined types */
#include <sys/stat.h> /* stat deinitiions */
#include <unistd.h> /* include unix standard library */
-/* */
#include <stdio.h> /* include standard I/O library */
#include <stdlib.h> /* include standard library */
#include <string.h> /* include string library */
#include"macros.h"
void WriteMess(char *mess);
-
/* Program begin */
int main(int argc, char *argv[], char *envp[])
{
/*
* Begin
*/
- /* 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);
WriteMess("output pipe creation error");
exit(0);
}
- /* fork child to run barcode program */
- pid = fork();
- if (pid == -1) {
+ /* First fork: use child to run barcode program */
+ if ( (pid = fork()) == -1 ) {
WriteMess("child creation error");
- exit(0);
+ exit(0);
}
/* if child */
if (pid == 0) {
dup2(pipein[0], STDIN_FILENO); /* remap stdin in pipe input */
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);
}
/*
* Parent write string to pipe input and close it,
write(pipein[1], argv[1], strlen(argv[1]));
close(pipein[1]);
waitpid(pid, NULL, 0);
- /* Second fork use child to run ghostscript*/
- pid = fork();
- if (pid == -1) {
+ /* Second fork: use child to run ghostscript*/
+ if ( (pid = fork()) == -1) {
WriteMess("child creation error");
exit(0);
}