To execute foo < file > bar & < file (part 1) > bar (part 2) & (part 3) First fork Parent do not do a blocking wait on the child. Child part 1 fd = open( file, read) close (STDIN_FILENO) dup (fd) close fd part 2 fd = open(bar, write, ...) dup2(fd, STDOUT_FILENO); close fd part 4 exec foo