1 /*-
2 * %sccs.include.proprietary.c%
3 */
4
5 #ifndef lint
6 static char sccsid[] = "@(#)refer3.c 4.3 (Berkeley) 04/18/91";
7 #endif /* not lint */
8
9 #include "refer..c"
10 #define move(x, y) close(y); dup(x); close(x);
11
corout(in,out,rprog,arg,outlen)12 corout(in, out, rprog, arg, outlen)
13 char *in, *out, *rprog;
14 {
15 int pipev[2], fr1, fr2, fw1, fw2, n;
16 int status;
17
18 pipe(pipev);
19 fr1 = pipev[0];
20 fw1 = pipev[1];
21 pipe(pipev);
22 fr2 = pipev[0];
23 fw2 = pipev[1];
24 if (fork() == 0)
25 {
26 close(fw1);
27 close(fr2);
28 move(fr1, 0);
29 move(fw2, 1);
30 execl(rprog, "deliv", arg, 0);
31 err("Can't run %s", rprog);
32 }
33 close(fw2);
34 close(fr1);
35 write(fw1, in , strlen(in));
36 close(fw1);
37 wait(&status);
38 n = read(fr2, out, outlen);
39 out[n] = 0;
40 close(fr2);
41 return(n);
42 }
43