ptg10805159Section 15.4 Coprocesses 549
parent child (coprocess)
fd1[1]fd2[0]stdinstdoutpipe1pipe2Figure 15.16Driving a coprocess by writing its standardinput and reading its standardoutputThe program in Figure15.17 is a simple coprocess that reads two numbers from its
standardinput, computes their sum, and writes the sum to its standardoutput.
(Coprocesses usually do moreinteresting work than we illustrate here. This example is
admittedly contrived so that we can study the plumbing needed to connect the
processes.)
#include "apue.h"int
main(void)
{
int n, int1, int2;
char line[MAXLINE];while ((n = read(STDIN_FILENO, line, MAXLINE)) > 0) {
line[n] = 0; /* null terminate */
if (sscanf(line, "%d%d", &int1, &int2) == 2) {
sprintf(line, "%d\n", int1 + int2);
n=strlen(line);
if (write(STDOUT_FILENO, line, n) != n)
err_sys("write error");
}else {
if (write(STDOUT_FILENO, "invalid args\n", 13) != 13)
err_sys("write error");
}
}
exit(0);
}Figure 15.17 Simple filter to add two numbersWe compile this program and leave the executable in the fileadd2.
The program in Figure15.18 invokes theadd2coprocess after reading two numbers
from its standardinput. The value from the coprocess is written to its standardoutput.
#include "apue.h"static void sig_pipe(int); /* our signal handler */int