corout(in
, out
, rprog
, arg
, outlen
)
# define move(x, y) close(y); dup(x); close(x);
int pipev
[2], fr1
, fr2
, fw1
, fw2
, n
;
pipe (pipev
); fr1
= pipev
[0]; fw1
= pipev
[1];
pipe (pipev
); fr2
= pipev
[0]; fw2
= pipev
[1];
close (fw1
); close (fr2
);
execl(rprog
, "deliv", arg
, 0);
err ("Can't run %s", rprog
);
write (fw1
, in
, strlen(in
));
n
= read (fr2
, out
, outlen
);