pipe(pout); pipe(pin);
retval = pipe(pout); if (retval) perror("pipe"); retval = pipe(pin); if (retval) perror("pipe");
int forkPipeExecAndFeed(struct DataBlock *inp, const char *cmd){	int pout[2], pin[2];  int childid;  pipe(pout);  pipe(pin);  childid = fork();  if (childid) { // parent    write(pout[1], datablockData(inp), datablockSize(inp));    close(pout[1]);    close(pout[0]);    close(pin[1]);  } else       { // child    close(pin[0]);    close(pout[1]);    dup2(pout[0],0);    dup2(pin[1],1);    execl(cmd, cmd, NULL);    printf("Shouldn't be here, wound up returning from exec!!\n");    exit(1);  }  return pin[0];}