xref: /csrg-svn/old/refer/hunt/refer3.c (revision 24436)
112267Stut #ifndef lint
2*24436Smckusick static char *sccsid = "@(#)refer3.c	4.2 (Berkeley) 08/26/85";
312267Stut #endif
412267Stut 
512267Stut #include "refer..c"
612267Stut #define move(x, y) close(y); dup(x); close(x);
712267Stut 
812267Stut corout(in, out, rprog, arg, outlen)
912267Stut char *in, *out, *rprog;
1012267Stut {
1112267Stut 	int pipev[2], fr1, fr2, fw1, fw2, n;
1212267Stut 	int status;
1312267Stut 
1412267Stut 	pipe(pipev);
1512267Stut 	fr1 = pipev[0];
1612267Stut 	fw1 = pipev[1];
1712267Stut 	pipe(pipev);
1812267Stut 	fr2 = pipev[0];
1912267Stut 	fw2 = pipev[1];
2012267Stut 	if (fork() == 0)
2112267Stut 	{
2212267Stut 		close(fw1);
2312267Stut 		close(fr2);
2412267Stut 		move(fr1, 0);
2512267Stut 		move(fw2, 1);
2612267Stut 		execl(rprog, "deliv", arg, 0);
27*24436Smckusick 		err("Can't run %s", rprog);
2812267Stut 	}
2912267Stut 	close(fw2);
3012267Stut 	close(fr1);
3112267Stut 	write(fw1, in , strlen(in));
3212267Stut 	close(fw1);
3312267Stut 	wait(&status);
3412267Stut 	n = read(fr2, out, outlen);
3512267Stut 	out[n] = 0;
3612267Stut 	close(fr2);
3712267Stut 	return(n);
3812267Stut }
39